1

我对 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();

问题:解决任何问题都会对我有所帮助

  1. href.sendKeys() 成功模拟用户点击,但不等待页面加载
  2. href.click() 模拟用户点击失败,但成功等待页面加载
  3. 我已经搜索了 .click() 方法的源代码来尝试手动创建一个 waitForPageToLoad 函数,但我一直无法找到它。

我知道我没有提供太多信息,因为我正在运行测试的应用程序是内部的,所以我无法共享调试链接。但是,任何可以帮助我弄清楚发生了什么的想法或以前遇到类似问题的经验都将不胜感激。

现在,我必须同时执行 sendKeys 和 click 才能达到预期的效果。

4

2 回答 2

4

每当您.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%。

请检查我在无法在 IE 上运行 Selenium 脚本的答案

于 2013-09-06T05:53:43.813 回答
1

您可以在这里做的是在 sendKeys 操作之后,使用 WebDriverWait 在结果页面上放置几个等待元素。这将达到您的目的。

于 2013-09-06T06:47:04.297 回答