首页 文章

Selenium click方法正在执行,然后超时

提问于
浏览
2

我正在使用selenium webdriver来运行我的自动化测试 . 我的一个测试打开登录页面,输入凭据并单击登录按钮 . 当我在本地运行它时,我可以看到它已成功登录到该站点但是我的测试在click方法上引发了错误,即使我已经看到它移动到下一页 . 我也在使用Chrome驱动程序 .

错误上的文字说:

OpenQA.Selenium.WebDriverException:'对远程WebDriver服务器的URL请求http:// localhost:4444/60秒后单击超时 . 内部异常WebException:请求已中止:操作已超时 .

这是我用来定位元素并单击它的代码:

private IWebElement LoginButton => Wait.Until(d => Driver.FindElementByCssSelector(".btn"));

private void ClickLoginButton()
{                               
    LoginButton.Click();
}

其他网站的其他点击方法工作正常,我似乎只看到这个错误与此按钮 .

2 回答

  • -1

    当Selenium执行 click() 时,它将尝试等待页面加载 . 来自docs

    Click()方法将尝试阻止,直到页面加载完毕

    如果 IWebDriver 没有收到此指示(如果内存服务的话,则为 document.readyState ),它将以 WebDriverException 结束 .

    没有任何"pretty"解决方案 . 一种选择是在驱动程序初始化中设置 ChromeOption

    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.AddAdditionalCapability("pageLoadStrategy","none");
    IWebDriver driver = new ChromeDriver(chromeOptions);
    

    但这会影响 all the tests .

    另一个选择是在此特定按钮中捕获 WebDriverTimeoutException

    private void ClickLoginButton()
    {
        try
        {
            driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1));    
            LoginButton.Click();
        }
        catch (WebDriverTimeoutException) { }
        finally
        {
            driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(originalTime));
        }
    }
    
  • 0

    我遇到了同样的问题:对URL的远程WebDriver服务器的HTTP请求http://localhost:17553/session/1a94ba744cb6dc03af7d65bf58003eff/element/0.42183143444524296-3/click timed out after 60 second

    在我的方案中,在ChromeDriver构造函数中指定超时有所帮助

    /// <summary>
        /// Initializes a new instance of the <see cref="ChromeDriver"/> class using the specified path
        /// to the directory containing ChromeDriver.exe, options, and command timeout.
        /// </summary>
        /// <param name="chromeDriverDirectory">The full path to the directory containing ChromeDriver.exe.</param>
        /// <param name="options">The <see cref="ChromeOptions"/> to be used with the Chrome driver.</param>
        /// <param name="commandTimeout">The maximum amount of time to wait for each command.</param>
        public ChromeDriver(string chromeDriverDirectory, ChromeOptions options, TimeSpan commandTimeout)
            : this(ChromeDriverService.CreateDefaultService(chromeDriverDirectory), options, commandTimeout)
        {
        }
    

相关问题