在浏览器中直接运行脚本时,Click事件正在工作,但在弹出窗口

时间:2016-03-17 17:04:56

标签: 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上执行): - (

这是HTML代码,其中出现了元素ID:

<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>

1 个答案:

答案 0 :(得分:1)

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

如果“弹出窗口”是模式对话框,则需要确保元素定位器在弹出窗口打开时返回唯一元素。如果定位器匹配多个元素,Selenium将仅在匹配的第一个元素上运行。

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