【问题标题】:Does WebDriverWait return an element in Java?WebDriverWait 是否返回 Java 中的元素?
【发布时间】:2017-10-25 14:20:58
【问题描述】:

我一直在用 Java 编写测试,我像这样使用 WebDriverWait:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

我的问题出现了,因为我开始用 Python 编写测试,我遇到了这样的 Python WebDriverWait:

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement"))

也就是说,Python 中的 WebDriverWait 在等待的同时还返回一个元素。 Java中的WebDriverWait可以做同样的事情,返回一个元素吗?如果可以,我从来不知道。

【问题讨论】:

  • 你为什么不自己测试一下?
  • 一个简单的谷歌搜索,看一下文档,或者像@LonelyNeuron 建议的那样,试一试就可以很好地回答这个问题。一个字的答案是

标签: java python selenium selenium-webdriver automated-tests


【解决方案1】:

来自documentation,是的:

WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

在抛出 TimeoutException 或如果 它发现元素将在 0 - 10 秒内返回它。 WebDriverWait 默认情况下,每 500 毫秒调用一次 ExpectedCondition,直到它 成功返回。的成功返回值 ExpectedCondition 函数类型是布尔值 true,或 非空对象。

【讨论】:

    【解决方案2】:

    WebDriverWait (Java)

    正如您所说,我们将 WebDriverWait 初始化为:

    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
    

    documentation 明确提到,这个 WebDriverWait 实例在抛出 TimeoutException 之前最多等待 5 秒,或者如果它发现元素将在 0 - 10 秒内返回它。

    所以我们可以重写代码块如下:

    WebDriverWait wait = new WebDriverWait(driver, 5);
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
    element.click();
    

    WebDriverWait (Python)

    正如您也提到的,我们将 WebDriverWait 初始化为:

    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement"))
    

    Python 会自动分配数据类型,因此我们不需要明确。

    因此通过 Selenium-JavaSelenium-PythonWebDriverWait 的初始化是等效的。

    【讨论】:

    • 问题不在于如何初始化它,问题在于 WebDriverWait 是否返回一个元素...特别是在 Java 中。
    • @JeffC 是的,这就是我在第二个代码块中以WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id&lt;locator&gt;)); 提供的内容,您在这里看到了什么问题?请解释否决票。
    • 我已经解释过了……你回答了一个没有被问到的问题。您一次都没有回答 WAS 提出的问题。您在上面的评论中的引用没有回答这个问题。请参阅 Durden 的答案以获取正确答案。
    • @JeffC 对不起,我认为你真的需要努力理解英语作为一种语言。你似乎弄乱了正确的答案。
    • 我的母语是英语...我对英语的理解非常好,谢谢。现在回答您的问题...实际提出的问题是Does WebDriverWait return an element in Java?。请在您的上述答案中指出该问题的答案...引用它。
    【解决方案3】:

    来自关于等待的 selenium 文档:

    我们将 condition 作为函数引用传入,wait 将重复运行,直到其返回值为真。 “真实”返回值是在手头的语言中计算结果为布尔值 true 的任何内容,例如字符串、数字、布尔值、对象(包括 WebElement)或填充的(非空)序列或列表。这意味着 空列表 的计算结果为 false。当条件为真并且阻塞等待被中止时,条件的返回值成为等待的返回值。

    https://www.selenium.dev/documentation/en/webdriver/waits/#explicit-wait

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2022-08-18
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      相关资源
      最近更新 更多