我正在尝试自动化一个测试用例,其中我通过点击图像来提交表单。
页面重新加载后,我无法与网页上的任何元素进行交互。
我正在使用Java,Firefox驱动程序。
代码被卡住了,完全无法识别元素。
是否有类似于QTP,Selenium中的WebDriver等待机制?
我正在尝试自动化一个测试用例,其中我通过点击图像来提交表单。
页面重新加载后,我无法与网页上的任何元素进行交互。
我正在使用Java,Firefox驱动程序。
代码被卡住了,完全无法识别元素。
是否有类似于QTP,Selenium中的WebDriver等待机制?
两年后,Ruby 实现:
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.util {
@driver.execute_script("return document.readyState;") == "complete"
}
/**
* 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。
我认为使用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]")); //
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]")); //
click()
后等待取决于页面加载方式。 - reinierposthttp://release.seleniumhq.org/selenium-remote-control/0.9.0/doc/java/
waitForpageLoad()
for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if (isElementPresent(By.linkText("element"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}
wait.until
,而不是util
。 - labyrinth