【问题标题】:JAVA Selenium WebElement overriding click() methodJAVA Selenium WebElement 覆盖 click() 方法
【发布时间】:2018-02-07 18:58:50
【问题描述】:

override WebElement click() 添加一些 wait 功能是否是一种好习惯,因为在某些页面中我需要单击按钮,而在某些情况下按钮尚未加载,所以我添加了等待以检查元素是否可见。

所以我的问题是: 是创建abstract class 来实现 WebElement 并覆盖 click() 方法以添加一些等待功能更好,还是仅在特定情况下进行简单等待更好页面?

【问题讨论】:

  • 添加带有超时的等待总是好的。您需要它们来使您的测试跨平台更加可靠。
  • 在某些页面中,如果按钮没有完全加载,那么您应该在点击按钮之前提供explicit wait

标签: java selenium automation automated-tests


【解决方案1】:

根据文档Document Object Model (DOM) Level 2 HTML Specificationclick() 方法不接受任何参数,不返回任何值并且不报告任何例外

所以,很明显我们一开始就不能覆盖click() 方法。

但是您始终可以编写自定义用户函数来单击WebElement 以及某些类型的等待。在这些情况下,Selenium 的内置 Explicit WaitWebDriverWait 可以帮助我们。


显式等待

根据documentationExplicitWait 是您为WebDriver 实例定义、配置和实现的代码块,以等待满足特定条件,然后再继续执行下一行代码。有一些方法可以帮助我们实现 ExplicitWait,它只会在需要的时候等待。 WebDriverWait 结合 ExpectedConditionExplicitWait 可以实现的方式之一。

您可以在 discussion 中找到关于 ExplicitWait 的详细讨论。

【讨论】:

    【解决方案2】:

    我认为您无法做到这一点,因为 WebElement 是一个接口而不是一个类(或抽象类)。

    但是,如果您愿意,您可以实现自己的点击方法,等待然后点击。

    public void waitAndClick(By identifer){
        WebDriverWait wait = new WebDriverWait(driver, 30);
        WebElement elem = wait.until(ExpectedConditions.presenceOfElementLocated(identifer));
        elem.click();
    }
    

    【讨论】:

      【解决方案3】:

      这不是正确的做法,等待可能出现的问题

      1- 对于每个点击事件,它都会等待一段时间。

      2- 无论您给出的等待时间如何,都可能在页面完全加载之前结束(它适用于某些页面,而其他页面则失败)

      相反,您首先找到该元素并继续执行,请参阅以下问题了解更多详细信息

      WebDriver: check if an element exists?

      Selenium WebDriver - Test if element is present

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2014-09-28
        • 2018-01-10
        • 1970-01-01
        相关资源
        最近更新 更多