java - 单击事件在浏览器中直接运行脚本时有效,但在弹出窗口中访问相同的 UI 时无效

标签 java selenium selenium-chromedriver

使用 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(&quot;../../../common_core/media/images/orange_skin/orange_sprite.png&quot;);"></div>

                <.......Some other elemets defined here......>
                </body>
            </html>
        </iframe>
    </body>
</html>

最佳答案

当您说“弹出窗口”时,不确定您指的是模态窗口还是实际的新浏览器窗口,但如果“基本”窗口和“弹出”窗口上存在相同的按钮,则很可能 Selenium 正在单击基本窗口上的按钮而不是弹出窗口。

如果“弹出窗口”是模式对话框,那么您需要确保您的元素定位器在弹出窗口打开时返回唯一的元素。如果定位器匹配多个元素,Selenium 只会对第一个匹配的元素进行操作。

如果“弹出窗口”是一个实际的新浏览器窗口,您需要能够将焦点切换到该窗口。如果新窗口没有窗口 ID,这可能会很棘手。这个空间太小,无法解释如何做到这一点:),但您应该能够查找它。

关于java - 单击事件在浏览器中直接运行脚本时有效,但在弹出窗口中访问相同的 UI 时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067200/

相关文章:

java - GWT - 将外部 JavaScript 文件注入(inject) GWT 应用程序,无需 ScriptInjector

Java代码运行时生成和执行,java.lang.NoClassDefFoundError

java - chromedriver.exe 和 selenium-chrome-driver.jar 之间的区别

selenium - docker-compose 运行多个任务而不共享依赖项

selenium - unDetected_chromedriver 添加插件

python - Javascript 未加载 Selenium 测试

python - 使用 python 处理 selenium 中的应用程序下载窗口

java - Spring 3.0 将文件作为资源注入(inject)

java - 在 Android 开发者网站上使用蓝牙示例代码时出现错误

selenium - 具有多个数据表的 cucumber 步骤