在使用 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=" OK " id="popup_ok"></div>
</div>
</div>
如有任何建议,我们将不胜感激。谢谢
要单击 value 为 OK 的元素,您可以使用以下任一方法 :
使用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
不确定为什么我必须从执行脚本分配回响应,但没有它就无法工作。
尝试自动化在线订购流程。订单规格完成后,您按下保存按钮。如果项目规格(高度)>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=" OK " id="popup_ok"></div>
</div>
</div>
如有任何建议,我们将不胜感激。谢谢
要单击 value 为 OK 的元素,您可以使用以下任一方法
使用
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
不确定为什么我必须从执行脚本分配回响应,但没有它就无法工作。