Selenium WebDriver - 异常模态对话框警报

6

我正在尝试使用WebDriver自动化一个网站。 我正在使用Firefox驱动程序,但主页上有一个弹出式模态警告窗口,内容如下:

您需要使用IE 6.0来查看此应用程序。否则某些功能可能无法正常工作。我检查了页面的源代码,它有一个功能。模态警报不是HTML元素,我尝试使用FireBug查找任何元素,但无济于事。

if ( strBrowName == "Microsoft Internet Explorer" )
{
    if ( (( strBrowVersion.indexOf( 'MSIE 6' ) ) > 0 ) ) 
    {       
    }
    else
    {
        alert( "You need to use IE 6.0 for viewing this application. Else some features may not work" );
    }

在我的WebDriver代码中,我正在使用驱动程序中的以下功能(正如其他帖子建议的那样)
DesiredCapabilities dc=new DesiredCapabilities();
dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,UnexpectedAlertBehaviour.ACCEPT);
WebDriver driver =new FirefoxDriver(dc);

接下来我正在尝试一个简单的 GET 调用,并将其放在 try-catch 中:

try {
                 driver.get(B);
             }
             catch (UnhandledAlertException e) {
                 System.err.println("Caught UnhandledAlertException: ");                 
             }
             System.out.println("URL Opened");

如果我没有在驱动器对象上编写任何方法,而是关闭了驱动程序。程序会在Eclipse中正常终止,但模态警报仍然打开,尽管存在以下情况:
UnexpectedAlertBehaviour.ACCEPT

但是,如果我使用任何与驱动程序相关的方法或操作,比如说,像获取标题这么简单的操作:

String title = driver.getTitle();

Java代码抛出异常,但模态弹出警告框已关闭!而错误的最后一行号是我使用第一个驱动程序相关操作的行。

请分享你的想法...
Exception in thread "main" org.openqa.selenium.UnhandledAlertException: Unexpected modal dialog (text: You need to use IE 6.0 for viewing this application. Else some features may not work): You need to use IE 6.0 for viewing this application. Else some features may not work
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:17:10'
System info: host: 'LFY2DSY1', ip: '30.142.106.199', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=38.0.5, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: a97ab146-4929-4502-98f2-810169cc5532
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.createUnhandledAlertException(ErrorHandler.java:185)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:152)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:605)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:628)
    at org.openqa.selenium.remote.RemoteWebDriver.getTitle(RemoteWebDriver.java:319)
    at SelPkg.CIRS.main(CIRS.java:76)

这可能是根本原因吗?绕过 fxdriver.modals.clearFlag_ 的调用...参见 https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-the-the-body-o/44592827#44592827 - NevilleDNZ
1个回答

8
行为是有意的。这是它的工作方式 -
  1. 您输入driver.get(B)。它触发浏览器打开网页,然后它与浏览器无关,因此不关心是否打开警报。
  2. 页面加载时,弹出对话框出现,但您的代码或Eclipse端没有任何反应。
  3. 当您尝试执行另一个操作时,它与浏览器交互并看到一个意外的弹出对话框。

现在,问题是模态对话框关闭了,但仍然出现异常,请尝试以下方法。

  1. 将第二个操作包含在try / catch中,并处理 UnhandledAlertException
  2. 在该catch块内,执行,driver ->切换到 ->警报 - & gt;接受
  3. 在catch块之后,再次执行第二个操作。

2
谢谢你的回答。我也对异常发生的时间感到困惑。 - WW.

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