VBA SeleniumBasic - кликабели больше не работают после пропущенного - PullRequest
0 голосов
/ 29 июня 2018

Я создал очень сложный 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...