c# - 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();
}
其他网站的其他点击方法工作正常,我似乎只看到此按钮出现此错误。
解决方案
当 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));
}
}
推荐阅读
- haskell - 如何使用新的 cabal 生成 HTML 代码覆盖率报告?
- python - 如何使用 MySql 上的 Python Django 在 Heroku 上运行应用程序?KeyError: '', code=H10 desc="App 崩溃"
- php - 在 Laravel 5 和 AJAX 上传块
- java - 使用 ArrayList 对我的数组进行更改,然后将其转换回数组,数组不会更改
- python - 当我改变一个对象的值时,我想改变另一个对象的值
- python - Pandas - 多条件查找速度
- c++ - 如果 sizeof(struct ...) 不等于给定数字,如何获得 C 编译器#error?
- c# - 如何从 SslCredentials 和令牌字符串创建 CallCredentials
- r - 线性回归 - 为自变量的每个类别插入 NA
- reactjs - 如何为在 redux 中触发的动作设置拦截器