Я создал очень сложный SeleniumBasic через VBA через Excel Addin setup, который взаимодействует с одним из ведущих веб-сайтов системы тикетов для сбора и заполнения данных. Система взаимодействует с более чем 90 различными полями / кликабелями с 3 различными страницами, 6 различными вкладками и вложенными всплывающими окнами ... развернутыми для 120 пользователей, которые используют средства автоматизации примерно 20 раз в день.
И это работает безупречно уже более года ...
Мы только что подготовили еще 20 пользователей в одной системе, и их автоматизация отказывается работать.
Вот где я нахожусь в своем исследовании:
- Я могу вручную пройтись по коду в новой системе и успешно пройти всю автоматизацию, поэтому проблема, вероятно, связана со скоростью, с которой VBA / Selenium пытается взаимодействовать с веб-сайтом.
- Как только система не может найти поле или щелкнуть по нему, она отказывается найти какие-либо другие после этого.
- Способ построения системы для максимально быстрой работы - стандартная обработка ошибок VBA. Он не может что-то найти, он идет к обработчику ошибок, обработчик ошибок говорит, что нужно подождать одну секунду, а затем повторить попытку. Опять же, эта система работает безупречно более года и в настоящее время работает на системах 120 пользователей.
- Чтобы узнать, может быть, Selenium отказывается перезагружать кликабельную систему, я отключил обработку ошибок от Resume до Resume Next, а затем выполнил цикл do while с логическим флагом для продолжения попытки, пока она не была успешной, но после первая ошибка, он отказался найти что-либо еще, в том числе различные поля
- Единственное, что объединяет 20 новых пользователей, это то, что все они используют Chrome v66, в то время как все работающие системы имеют старые копии Chrome, которым не менее 9 месяцев.
- Подумав, что это может быть проблемой, я взял все ChromeDriver и систематически просматривал один за другим, чтобы проверить, не достигли ли мы другой производительности с другим ChromeDriver, но все ChromeDrivers имели одинаковую ошибку
Так вот где я стою. Мне интересно, есть ли какое-то ключевое понимание, которое я пропускаю, или обходной путь, который заставит более новые версии Chrome повторять поля. Или ... мне нужно попробовать инструмент VBA / Selenium, отличный от SeleniumBasic, чтобы это исправить. Или ... мне нужно откатить этих 20 пользователей на более старые версии Chrome.
Спасибо, что поделились своим опытом.
''''Check to see if there are any aliases=================================
For AliasCheck = 2 To AliasCounter + 1
If Hash = Sheets("Temp Subjects & Locations").Range("AY" & AliasCheck) Then
AliasName = Sheets("Temp Subjects & Locations").Range("AY" & AliasCheck)
AliasCount = AliasCount + 1
AliasDisplayName = Sheets("Temp Subjects & Locations").Range("AZ" & AliasCheck)
temp1 = ""
temp2 = ""
Call countryDictionary
'drops the country back into Excel to later remove the dupes
temp1 = Sheets("Temp Subjects & Locations").Range("BA" & AliasCheck)
temp2 = dict(temp1)
Sheets("Temp Subjects & Locations").Range("BG" & AliasCount + 1) = temp2
''''Click to add AKA's names
iframeText = "iframe_win_" & AddParty
robot.SwitchToDefaultContent
robot.SwitchToFrame iframeText
iframeTracker = iframeTracker + 1
iframeText = "iframe_win_" & iframeTracker
robot.SwitchToDefaultContent
robot.SwitchToFrame iframeText
robot.FindElementById("X_SUBJECT_ALTERNATE_NM.X_ALTERNATE_NM").SendKeys (AliasDisplayName)
robot.FindElementById("dijit_form_Button_0").Click
End If
Next AliasCheck
Переменная AddParty - это способ отслеживать количество всплывающих окон, из которых мы пришли.
Переменная iFrameTracker - это способ отслеживания количества всплывающих окон, которые мы собираемся ... система последовательно нумерует свои всплывающие окна ... вместо разборчивых имен ...
Более новые системы перейдут к SendKeys и затем решат не работать. В следующем резюме он откажется найти кнопку ОК ("dijit_form_Button_0")
Вот код, с которым я играл, чтобы узнать, смогу ли я повторить попытку, используя «Resume Next» вместо «Resume»
robot.FindElementById("X_SUBJECT_ALTERNATE_NM.X_ALTERNATE_NM").SendKeys (AliasDisplayName)
Do While FailRetry = True
FailRetry = False
robot.FindElementById("X_SUBJECT_ALTERNATE_NM.X_ALTERNATE_NM").SendKeys (AliasDisplayName)
Loop
errHandler4:
If errorCounter < 21 Then
Application.wait (Now + TimeValue("00:00:01"))
errorCounter = errorCounter + 1
FailRetry = True
Resume Next
Else
MsgBox "Reached 20 second timeout. Stopping processing."
Exit Sub
End If