在使用 Selenium VBA 的弹出窗口中单击“确定”

Click OK in popup using Selenium VBA

尝试自动化在线订购流程。订单规格完成后,您按下保存按钮。如果项目规格(高度)>1000mm,则会显示一个弹出窗口。我在自动点击它时遇到问题。它不在 iframe 中。

下面第二行代码: bot.FindElementById("ctl00_mainContent_ucOrderDetailBlind_btnSave").Click

'单击 'causes' 如果 >1000mm 条件为真,则显示弹出警告。它只有一个按钮 - 'OK'(编码为 nbsp;OKnbsp; )。手动单击允许自动前进到下一页,但我需要帮助来让编码自动执行此操作。目前代码似乎挂起显示弹出窗口。 debug提示下一条指令无法执行——很明显是因为那个findElementById....Click找不到,因为进程卡住了。

我已经尝试了几种替代方案 - 请查看我尝试过的最有可能的代码。

If ThisWorkbook.Sheets("SquareSpace").Cells(r, "F").Value > 1000 Then ' The item is more than 1000mm high

bot.FindElementById("ctl00_mainContent_ucOrderDetailBlind_btnSave").Click 
                            
'Alternative 1
bot.FindElementByXPath("//input[@ID='popup_ok' and text()=' OK ']").Click

'Alternative 2
bot.SwitchToAlert.Accept
bot.Wait 1000

Alternative 3
bot.FindElementById("popup_ok").Click

Else ' for when the item is not more than 1000mm high

       bot.FindElementById("ctl00_mainContent_ucOrderDetailBlind_btnSave").Click
       bot.Wait 500

End If

'Then the next instruction of the form bot.FindElementById ......Click

HTML 为清楚起见删除了一些内容(文本和样式):

<div id="popup_container" class="ui-draggable" style="position: absolute; z-index: 99999; padding: 0px; margin: 0px; min-width: 604px; max-width: 604px; top: 0px; left: 647.5px;"><h1>Warning</h1>
    
    <div id="popup_content" class="alert">

        <div id="popup_message"><br>WARNING TEXT</div>

        <div id="popup_panel"><input type="button" value="&nbsp;OK&nbsp;" id="popup_ok"></div>

    </div>
</div>

如有任何建议,我们将不胜感激。谢谢

要单击 valueOK 的元素,您可以使用以下任一方法 :

  • 使用FindElementByCss():

    bot.Wait 5000
    bot.FindElementByCss("div#popup_container div#popup_panel > input#popup_ok").Click
    
  • 使用FindElementByXPath():

    bot.Wait 5000
    bot.FindElementByXPath("//div[@id='popup_container']//div[@id='popup_panel']/input[@id='popup_ok']").Click
    

尝试使用 javascript 来点击按钮:

[编辑 - 更新标识符]

element=bot.FindElementByXPath("//input[@id='popup_ok']")
x =bot.ExcuteScript("arguments[0].click();", element)

[上面的代码已更新 - 请参阅评论] [下方新增] 让它按预期工作有点有趣。

这是我的小测试函数,让您了解我用来检查的东西:

Function selenium()
    Dim driver As New WebDriver
    Dim element As WebElement
    
    driver.Start "chrome"
    driver.Get "https://www.google.co.uk"
    driver.FindElementByXPath("//input[@name='q']").SendKeys "hello world"
    Set element = driver.FindElementByXPath("//input[@value='Google Search']")
    
    x = driver.ExecuteScript("arguments[0].click();", element)
End Function

不确定为什么我必须从执行脚本分配回响应,但没有它就无法工作。