Selenium - 网络驱动程序等待

时间:2014-10-17 18:21:48

标签: java selenium

以下是我通常用来查找名称为&#34的元素的内容。电子邮件"

WebElement emailInput = (new WebDriverWait(driver, 10))
        .until(ExpectedConditions.presenceOfElementLocated(By
                .name("email")));

如果有一个元素模态体,如下所示

WebElement modalBody = enrollForm.findElement(By
        .className("modal-body"));

现在,如果我要在另一个WebElement sorta中找到特定的WebElement,比如...

WebElement a = driver.findElement(By.id("KeepSmiling");
WebElement b = a.findElement(By.className("ChocolatesMakeMeSizzle");

此处ba中的元素。由于还有许多其他具有className的div - > ChocolatesMakeMeSizzle

我希望用WebDriverWait做同样的事情。我使用Thread.sleep(xx)来避免这个问题,但这是一个非常糟糕的方法。

这是我尝试的(但我意识到我试图减慢一个没有意义的webElement。)

WebElement emailInput = (new WebDriverWait(modalBody, 10))
        .until(ExpectedConditions.presenceOfElementLocated(By
                .name("email")));

任何提示如何实现这一目标?

忏悔:老实说,我正在避免使用Thread.sleep(xx)这种方法。

我能够使用xpath并找到方法,但我希望能回答我的问题! :)

1 个答案:

答案 0 :(得分:3)

WebElement emailInput = (new WebDriverWait(driver, 10))
       .until(ExpectedConditions.elementToBeClickable(By
            .xpath("some_complex_xpath")));

如果元素存在于DOM上,那么Modal应该没有问题。 我正在测试一个大系统并且所有表单都是模态的,我们在使用ExpectedConditions找到元素时没有任何问题。

另外,为了找到你可以使用XPATH ......

这是一个例子: //输入[contains(@class,' name')] / following :: input [@type =' Button']