PhantomJS无法检测添加到DOM的元素

时间:2016-05-17 18:22:01

标签: selenium phantomjs spock geb

当我在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]);
    }
}

0 个答案:

没有答案