【问题标题】:Can not catch Selenium WebDriverException on navigate url在导航 url 上无法捕获 Selenium WebDriverException
【发布时间】:2016-03-16 17:10:37
【问题描述】:

我在 C# 中使用 Selenium,我最近编写的测试有一点问题。

我创建了一个新的 FirefoxDriver,它导航到我的 URL,它会在进一步导航之前立即创建一个用于身份验证的弹出窗口。这里的问题是, driver.navigate().gotourl("") 确实等待 URL 被加载,它不会 - 也不应该 - 这样做。当我用 try catch 块包围此语句以捕获 WebDriverException 时,它只是忽略它并以以下方式结束我的测试:


Test Name:  SetUserPw
Test FullName:  XUnit_DataManager_Tests.DataManagerGui.PasswordTest.SetUserPw
Test Source:    C:\Programme\IMaT\TestPlugins\Plugins for XUnit\XUnit_DataManager_Tests\DataManagerGui\PasswordTest.cs : line 393
Test Outcome:   Failed
Test Duration:  0:00:00,001

Result StackTrace:  
bei OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   bei OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   bei OpenQA.Selenium.Firefox.FirefoxDriverCommandExecutor.Execute(Command commandToExecute)
   bei OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   bei OpenQA.Selenium.Remote.RemoteTargetLocator.Alert()
   bei WebsiteAutomation.Helpers.Helper.c.b__4_0(IWebDriver drv)
   bei OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   bei WebsiteAutomation.Helpers.Helper.WaitForAlert(UInt32 timeout)
   bei WebsiteAutomation.Helpers.Helper.WaitForBasicAuth(String user, String password, Boolean accept, UInt32 timeout)
   bei XUnit_DataManager_Tests.DataManagerGui.PasswordTest.OpenPasswordSite(String password) in C:\Programme\IMaT\TestPlugins\Plugins for XUnit\XUnit_DataManager_Tests\DataManagerGui\PasswordTest.cs:Zeile 430.
   bei XUnit_DataManager_Tests.DataManagerGui.PasswordTest..ctor(InverterFixture fixtureData) in C:\Programme\IMaT\TestPlugins\Plugins for XUnit\XUnit_DataManager_Tests\DataManagerGui\PasswordTest.cs:Zeile 36.
----- Inner Stack Trace -----
   bei System.Net.HttpWebRequest.GetResponse()
   bei OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
Result Message: 
OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:7055/hub/session/4b47ded2-6ba6-4052-8785-e8ba346092da/alert_text timed out after 60 seconds.
---- System.Net.WebException : Die Anfrage wurde abgebrochen: Timeout für Vorgang überschritten.

有没有办法导航到一个 URL,但对身份验证弹出窗口做出反应?

【问题讨论】:

    标签: c# selenium


    【解决方案1】:

    在页面加载时处理警报:

    var driver = new FirefoxDriver();
    
    // set the timeout to 0 and catch it
    driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(0));
    try{
        driver.Navigate().GoToUrl("...");
    }catch(WebDriverTimeoutException){
        driver.SwitchTo().Alert().Dismiss();
    }
    // restore the timeout
    driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(60));
    

    【讨论】:

    • 最新的 C# selenium 已将 SetPageLoadTimeout 函数替换为 get/set 属性 PageLoad。不管。正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多