【问题标题】:Selenium - Web Driver WaitSelenium - Web 驱动程序等待
【发布时间】:2014-10-20 22:03:41
【问题描述】:

这是我通常为查找名称为“电子邮件”的元素而写的内容

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

如果有如下所示的元素模态体怎么办

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

现在,如果我要在另一个 WebElement 中找到一个特定的 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 并找到方法,但我希望能回答我的问题! :)

【问题讨论】:

  • 我们可以帮助您解决问题中包含一些 html 的 xpath。

标签: java selenium


【解决方案1】:
WebElement emailInput = (new WebDriverWait(driver, 10))
       .until(ExpectedConditions.elementToBeClickable(By
            .xpath("some_complex_xpath")));

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

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

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

【讨论】:

  • 谢谢。如果 id 不起作用,我可能会使用 xpath。老实说,我对 xpaths 不是很好。我最终肯定能找到它,但我希望使用 modalBody...不知何故...id 和 className 让我觉得自己处于一个安全的泡沫中。
  • 能否请您发布该模态的HTML?在 xpath 中,您可以使用一些函数,如 contains、text() 和导航函数,如 /following 等。这很有帮助! :)
  • 别再担心了,我坐下来想通了! :D
  • 虽然,我真的希望我能以我想要的方式使用它:(
猜你喜欢
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多