使用 selenium 在实际窗口中直接访问特定 URL 时,Web 元素工作正常,并且我能够对这些元素执行操作,但是在登录系统执行相同的 URL 后执行相同的代码时操作(这次在弹出窗口(模式对话框)中打开同一屏幕)和像(单击)这样的 Selenium 命令不起作用,并且控制台上没有出现异常或错误消息。
案例#1:使用实际浏览器直接访问 URL 并执行点击操作: Please refer to UI in this case#1
driver.switchTo().frame("myframe");
if(driver.findElement(nextButton).isDisplayed()) {
driver.findElement(nextButton).click();
System.out.println("Next button enabled on Clicked");
} else {
System.out.println("Next button NOT Clicked");
}
控制台结果:单击“下一步”按钮 实际结果:在 UI 上执行的操作)
案例#2:登录系统后访问相同的 URL,并且根据系统功能,相同的 URL 将在模型窗口中打开,然后执行单击操作: Please refer to UI in case#2
driver.switchTo().frame("myframe");
if(driver.findElement(nextButton).isDisplayed()) {
driver.findElement(nextButton).click();
System.out.println("Next button enabled on Clicked");
} else {
System.out.println("Tool button enabled But NOT Clicked");
}
控制台结果:单击“下一步”按钮 实际结果操作未在 UI 上执行):-(
下面是显示元素 ID 的 HTML 代码:
<html>
<body>
<iframe>
<html>
<body>
<.......Some other elemets defined here......>
<div id="nextButton" title="Next (N)" class="playerSp next-button" hoverstyle="next-button-over" clickevent="nextButton" keycode="78" tabindex="2" style="display: block; background-image: url("../../../common_core/media/images/orange_skin/orange_sprite.png");"></div>
<.......Some other elemets defined here......>
</body>
</html>
</iframe>
</body>
</html>
最佳答案
当您说“弹出窗口”时,不确定您指的是模态窗口还是实际的新浏览器窗口,但如果“基本”窗口和“弹出”窗口上存在相同的按钮,则很可能 Selenium 正在单击基本窗口上的按钮而不是弹出窗口。
如果“弹出窗口”是模式对话框,那么您需要确保您的元素定位器在弹出窗口打开时返回唯一的元素。如果定位器匹配多个元素,Selenium 只会对第一个匹配的元素进行操作。
如果“弹出窗口”是一个实际的新浏览器窗口,您需要能够将焦点切换到该窗口。如果新窗口没有窗口 ID,这可能会很棘手。这个空间太小,无法解释如何做到这一点:),但您应该能够查找它。
关于java - 单击事件在浏览器中直接运行脚本时有效,但在弹出窗口中访问相同的 UI 时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067200/