我正在测试网页,其部分内容已加载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等待表格中的其他行?
答案 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查询。