VBA SeleniumBasic-缺少一个后,Clickables不再起作用

时间:2018-06-29 15:44:59

标签: vba excel-vba selenium selenium-webdriver selenium-chromedriver

我通过Excel插件设置通过VBA构建了一个非常复杂的SeleniumBasic,该插件与领先的票务系统网站之一进行交互,以剪贴和填充数据。该系统可与90多个不同的字段/可点击项进行交互,并具有3个不同的页面,6个不同的选项卡以及嵌套的弹出窗口...部署给每天使用20次自动化的120个用户。

它已经完美运行了一年多了...

我们刚刚在同一系统上配置了20个用户,而他们的自动化功能却无法正常工作。

这是我研究的地方:

  • 我能够手动浏览新系统上的代码,并使它成功地通过整个自动化过程,因此问题可能与VBA / Selenium尝试与网站进行交互的速度有关。
  • 一旦系统找不到字段或可点击的字段,此后它将拒绝找到其他字段。
    • 构建系统以使其尽快运行的方式是通过标准VBA错误处理。它找不到任何东西,转到错误处理程序,错误处理程序说等待一秒钟,然后重试。同样,该系统已经完美运行了一年多,目前可在120个用户系统上运行。
    • 要查看Selenium是否拒绝重新加载可点击的对象,我将错误处理从Resume还原为Resume Next,然后使用布尔标志执行do while循环,以尝试直到成功为止,但是之后第一次失败,它拒绝查找其他任何内容,包括不同的字段
  • 这20个新用户的共同点是他们都使用Chrome v66,而所有运行中的系统都具有至少9个月的旧Chrome版本
    • 我认为这可能是一个问题,我抓住了所有的ChromeDriver,并系统地逐一测试了我们是否在不同的ChromeDriver上获得了不同的性能,但是所有的ChromeDrivers都存在相同的错误

这就是我的立场。我想知道是否缺少一些关键的见解,或者是否有一种解决方法可以使Chrome的更新版本重试这些字段。或者...我是否需要尝试使用SeleniumBasic以外的VBA / Selenium工具来解决此问题。或者...我需要将这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”)

这是我正在使用的代码,以查看是否可以使用“恢复下一个”而不是“恢复”来重试

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

0 个答案:

没有答案