webdriver sendKeys 不等待页面加载
Posted
技术标签:
【中文标题】webdriver sendKeys 不等待页面加载【英文标题】:webdriver sendKeys doesn't wait for page to load 【发布时间】:2013-09-09 22:11:14 【问题描述】:我对 selenium webdriver 有疑问,如果有人能帮助我,我将不胜感激
环境:
selenium-server-standalone-2.31.0.jar / selenium-server-standalone-2.35.0.jar IEDriverServer.exe(试用版本 2.28 - 2.35)示例代码:
WebElement href = this.findElement(By.xpath("//A"));
href.sendKeys(Keys.ENTER);
href.click();
问题:解决任何问题都会对我有所帮助
-
href.sendKeys() 成功模拟用户点击,但不等待页面加载
href.click() 模拟用户点击失败,但成功等待页面加载
我搜索了.click()方法的源代码尝试手动创建waitForPageToLoad函数,但一直没找到。
我知道我没有提供太多信息,因为我运行测试的应用程序是内部的,所以我不能分享调试链接。但是,任何可以帮助我弄清楚发生了什么的想法或以前遇到类似问题的经验都将不胜感激。
现在,我必须同时执行 sendKeys 和 click 才能达到预期的效果。
【问题讨论】:
可以分享一下错误信息吗? 既然你点击了链接,为什么不使用点击方法而不是发送密钥?有什么具体原因吗? 您应该在执行点击事件后应用等待条件,即href.sendKeys(Keys.ENTER);
在这里引用不同的等待条件***.com/a/12859689/624003
【参考方案1】:
每当您在按钮上执行.click()
或链接时,都会调用诸如“waitTillPageLoads()”之类的内部方法,因此 webdriver 会等待直到下一页完全加载。
我遇到过这样一种情况,由于 Web 应用程序太慢,它等待了将近 10-15 分钟才能加载页面。听起来很奇怪,我知道。
但是sendKeys()
不会等待。因为 sendkeys 不用于点击目的,而是用于输入键。
我想你这样做一定有充分的理由
href.sendKeys(Keys.ENTER);
如果你仍然想使用这种方法,你可以隐式地等待下一页的元素使用隐式等待
WebDriverWait wait = new WebDriverWait(webDriver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath")));
请注意:
你引用
href.click() fails to simulate user click, but successfully wait for page to load
可能是因为您没有将浏览器级别设置为 100%。
请在Unable to run Selenium script on IE查看我的回答
【讨论】:
这是正确答案。我没有将浏览器级别设置为 100%,但我使用 ignoreZoomSetting 启动它,因此该应用程序可以毫无问题地运行,但不会单击正确的位置。非常感谢 等待 10-15 分钟加载页面是我想要的。我正在使用 selenium 创建一个监控工具来测量响应时间,而不仅仅是运行测试。所以显式和隐式等待的超时不适合我的需要。再次感谢您的回答。【参考方案2】:您可以在这里做的是在 sendKeys 操作之后,使用 WebDriverWait 在结果页面上放置几个等待元素。这将达到您的目的。
【讨论】:
以上是关于webdriver sendKeys 不等待页面加载的主要内容,如果未能解决你的问题,请参考以下文章
driver.switchTo().alert().sendKeys("Hello") 不适用于最新的 chrome 驱动程序 - Selenium Webdriver -java