在 Webdriver 中提交表单后如何等待页面加载。我正在使用 Firefox 驱动程序
Posted
技术标签:
【中文标题】在 Webdriver 中提交表单后如何等待页面加载。我正在使用 Firefox 驱动程序【英文标题】:How do i wait for a page to load after a form submits in Webdriver. I am using firefox driver 【发布时间】:2011-09-04 12:22:00 【问题描述】:我正在尝试自动化一个测试用例,在该测试用例中我通过单击图像来提交表单。
页面重新加载后,我无法与网页上的任何元素进行交互
我用的是java,firefox驱动。
代码卡住了,根本无法识别元素。
webdriver 有没有像 QTP 和 selenium 那样的等待机制?
【问题讨论】:
【参考方案1】:2 年后,ruby 实现:
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.util
@driver.execute_script("return document.readyState;") == "complete"
【讨论】:
酷。但是当前版本确实可以很好地处理页面转换加载! @ThiagoFMacedo 我不能代表 Linux,但我的经验不是它在 Windows 上处理得很好。我们做了类似 allenhwkim 建议的事情。 那里有一个错字。它应该是wait.until
,而不是 util。【参考方案2】:
只需使用FluentWait 类:
/**
* An implementation of the @link Wait interface that may have its timeout
* and polling interval configured on the fly.
*
* <p>Each FluentWait instance defines the maximum amount of time to wait for
* a condition, as well as the frequency with which to check the condition.
* Furthermore, the user may configure the wait to ignore specific types of
* exceptions whilst waiting, such as
* @link org.openqa.selenium.NoSuchElementException NoSuchElementExceptions
* when searching for an element on the page.
*
* <p>Sample usage:
* <code><pre>
* // Waiting 30 seconds for an element to be present on the page, checking
* // for its presence once every 5 seconds.
* Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
* .withTimeout(30, SECONDS)
* .pollingEvery(5, SECONDS)
* .ignoring(NoSuchElementException.class);
*
* WebElement foo = wait.until(new Function<WebDriver, WebElement>()
* public WebElement apply(WebDriver driver)
* return driver.findElement(By.id("foo"));
*
* );
*
或WebDriverWait。
【讨论】:
这是一个新课程吗?我有 2.39(c# 绑定),但它似乎不存在。这来自什么dll?也许我错过了一个【参考方案3】:我认为使用 selenium 2,您无需在使用 Firefox webdriver 提交表单后等待。
element.sendKeys("34344343");
webDriver.findElement(By.id("searchSubmitButton")).click();
WebElement columnInPostedPage = webDriver.findElement(By.xpath("//div[@id='content']/table/tbody/tr[2]/td[3]")); //
如果页面加载后通过javascript加载内容,您可以对内容执行类似的操作
query.submit();
long end = System.currentTimeMillis() + 5000;
while (System.currentTimeMillis() < end)
WebElement result = webDriver.findElement(By.id("content"));
if (result.isDisplayed())
break;
//Thread.sleep(1000);
WebElement columnInPostedPage = webDriver.findElement(By.xpath("//div[@id='content']/table/tbody/tr[2]/td[3]")); //
【讨论】:
Selenium 2 是否会在click()
之后等待取决于页面的加载方式。
我认为异常会让你跳出时间循环。我认为这行不通。您需要使用带有 .ignoring 方法的 WebDriverWait。【参考方案4】:
http://release.seleniumhq.org/selenium-remote-control/0.9.0/doc/java/
waitForpageLoad()
【讨论】:
我猜在使用 selenium RC 时会使用 waitForPageLoad。 Webdriver 是怎么回事?我正在使用 Firefox 驱动程序....我做了一些尝试和错误,似乎每当我们提交表单时都不需要写任何东西。有人可以评论吗 见***.com/questions/10720325/…【参考方案5】:for (int second = 0;; second++)
if (second >= 60) fail("timeout");
try if (isElementPresent(By.linkText("element"))) break; catch (Exception e)
Thread.sleep(1000);
【讨论】:
-1:Webdriver 有隐式和显式等待的方法:here 谢谢你的答案。将来会更多地了解硒以上是关于在 Webdriver 中提交表单后如何等待页面加载。我正在使用 Firefox 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
等待页面重定向 Selenium WebDriver (Python)