如何等待一定数量的行?

时间:2014-03-28 08:06:50

标签: java selenium selenium-webdriver webdriver

我正在测试网页,其部分内容已加载XMLHttpRequest。在Ajax调用之后,我需要检查我的<table>是否包含2行(因为页面在加载时已经包含1行)。

我的测试:

@Before
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    driver.get("http://localhost/index.html");
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
}

@Test
public void testIfPartnerListPageIsPresent() {
    driver.findElement(By.id("123")).click();
    List<WebElement> rawList = driver.findElement(By.id("id-213"))
        .findElements(By.tagName("tr"));
    assertTrue("More than 1 raw", rawList.size() > 1);
}

我如何要求Selenium等待表格中的其他行?

3 个答案:

答案 0 :(得分:3)

此函数将一直等到表包含至少给定的行数

 public void waitUntilRowPopulates(WebElement element, final int rowCount) {
        final WebElement table = element;

        new FluentWait<WebDriver>(driver)
        .withTimeout(60, TimeUnit.SECONDS)
        .pollingEvery(10, TimeUnit.MILLISECONDS)
        .until(new Predicate<WebDriver>() {

            public boolean apply(WebDriver d) {
                 List<WebElement> rawList = table.findElements(By.tagName("tr"));
                 return (rawList.size() >= rowCount);
            }
        });
    }

答案 1 :(得分:0)

以下代码应该有所帮助:

int noOfRowsBeforeAJAXCall = driver.findElement(By.id("id-213")).findElements(By.tagName("tr")).size();
int noOfRowsAfterAJAXCall;

driver.findElement(By.id("123")).click();

while(1)
{
   noOfRowsAfterAJAXCall = driver.findElement(By.id("id-213")).findElements(By.tagName("tr")).size();

   // Check whether row nos. increased   
   if(noOfRowsAfterAJAXCall>noOfRowsBeforeAJAXCall)
     break;

   // Re-check after 1 sec
   Thread.sleep(1000m);
}

答案 2 :(得分:0)

对于网页,尤其是内容很多的网页,建议使用JSoup库来获取html,解析内部。这也可以用于同步。

示例代码:

tabBarController.tabBar.items?.first?.image = UIImage(named: "squadra")?.imageWithRenderingMode(.AlwaysOriginal)

JSoup有很多getter方法,可以灵活地找到我们想要的东西。它也支持CSS查询。