当我在chrome中运行我的测试时,它们工作得非常好,但我真的需要在phantomjs中不加考虑地运行我的测试。我正在自动化的应用程序使用primefaces和一直给我带来麻烦的特定web元素是primefaces咆哮。它是一个小弹出警报元素,似乎确认记录已成功保存。在需要时,growl会动态添加到DOM中。有时我的测试会毫无问题地通过,而其他时候它会超时并失败,因为测试并不总能检测到DOM中的咆哮。我需要能够访问此元素以确保其消息是成功消息。
等待和检测元素是否已添加到DOM的最佳方法是什么?
void save() {
WebTestUtils.returnToTop(driver)
actionMenu.selectItem("Save")
waitFor(30,1) {growlMessage.children().size() > 0} //TIMES OUT HERE, but not always
growlMessage.close(driver)
}
void close(WebDriver driver){
waitFor (30,1) {find(".ui-growl-item").size() > 0} //check that the growl item exists in the DOM
List<WebElement> closeIcon = driver.findElements(By.className("ui-growl-icon-close"))
JavascriptExecutor js = (JavascriptExecutor)driver;
//phantomjs is picky, jQuery is required for the following script to work
for(int i=0; i<closeIcon.size(); i++){
//close multiple growls if present
js.executeScript("jQuery(arguments[0]).click();", closeIcon[i]);
}
}