首页 > 解决方案 > Selenium click 方法正在执行然后超时

问题描述

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

错误上的文字说:

OpenQA.Selenium.WebDriverException: '对 URL http://localhost:4444/click的远程 WebDriver 服务器的 HTTP 请求在 60 秒后超时。

内部异常 WebException:请求已中止:操作已超时。

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

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

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

其他网站的其他点击方法工作正常,我似乎只看到此按钮出现此错误。

标签: c#seleniumselenium-webdriverselenium-chromedriverwebdriverwait

解决方案


当 Selenium 执行click()时,它将尝试等待页面加载。从文档

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

如果IWebDriver没有收到此指示(document.readyState如果没记错的话),它将以WebDriverException.

没有任何“漂亮”的解决方案。一种选择是ChromeOption在驱动程序初始化中设置

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

但这会影响所有的测试

另一种选择是抓住WebDriverTimeoutException这个特定的按钮

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

推荐阅读