如何使用JavaScript处理警告弹出窗口? Selenium Webdriver

3
Selenium WebDriver 2.53.1.1 Visual Studio 2015 C#
我正在测试的应用程序有弹出警报窗口,我可以使用以下代码处理而没有问题。
 ts.getDriver().SwitchTo().Alert().Accept();

然而,我遇到了一个新问题。我的一些网页元素无法找到,因此我必须运行JavaScript来执行该网页元素(请参见下面的代码处理网页元素)。
    public void SelectHREFCID()
    {
        IJavaScriptExecutor js = ts.getDriver() as IJavaScriptExecutor;
        js.ExecuteScript("arguments[0].click()",hrefCID);
        try
        {
            ts.getDriver().SwitchTo().Alert().Accept();
        }
        catch (NoAlertPresentException)
        {
            // do nothing...
        }// Have to use this to find the hyperlink!
    }

问题在于js.ExecuteScript代码行运行后立即弹出了一个弹窗,并且我的Alert().Accept()代码行在此之后从未触发,因此程序就停在了那里。我在调试中逐行运行了这个代码,但是一旦我执行js.ExecuteScript代码行,就无法跳转到下一行。有什么建议如何处理这个问题吗?
更新:在我的代码(js.ExecuteScript)的这一点上,一旦执行了这行代码,我就看到了这个:enter image description here

enter image description here

一旦此弹出窗口显示,我的Selenium代码就不会继续进入try catch语句处理警报。
最新更新截至9/9:
我尝试了两种方式处理警报 enter image description here enter image description here 但是我的Selenium代码在弹出窗口触发时停止执行。
js.ExecuteScript("arguments[0].click().hrefCID);

**更新 09/12****

我更新了我的window.alert,这解决了问题(以确认)

 IJavaScriptExecutor js = ts.getDriver() as IJavaScriptExecutor;
        js.ExecuteScript("window.confirm = function(){return true;}");
        js.ExecuteScript("arguments[0].click()",hrefCID);
      //  js.ExecuteScript("window.alert = function() { return true;}");

你的问题不太清楚。你说的“程序停在那里并弹出”是什么意思?有没有异常或其他信息? - Saurabh Gaur
弹出窗口并不会在 JavaScript 代码运行时立即打开,但我的 Selenium 代码在此时没有继续执行。 - Andy Williams
@SaurabhGaur 请查看我的评论,感谢您的努力。 - Andy Williams
1
更新了我的窗口提示语句,问题已解决。谢谢@SaruabhGaur。如果您回复答案,我会给您信用!再次感谢! - Andy Williams
是的,我已经将它作为答案上传了,您可以将其标记为正确答案。谢谢.. :) - Saurabh Gaur
显示剩余5条评论
1个回答

1

我认为这个警告会阻止代码执行,你应该在点击覆盖confirmBox函数之前使用JS执行此脚本,如下所示:

js.ExecuteScript("window.confirm = function() { return true;}")

执行以下操作来点击按钮:
js.ExecuteScript("arguments[0].click()",hrefCID);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接