为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
森林海 2021-11-21 15:39:15
我正在使用 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();}其他网站的其他点击方法工作正常,我似乎只看到此按钮出现此错误。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

当 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));

    }

}


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信