JAVA Selenium WebElement重写click()方法

时间:2017-08-30 07:03:32

标签: java selenium automation automated-tests

override WebElement click()添加一些wait功能是不错的做法,因为在某些页面中我需要点击按钮,在某些情况下,按钮尚未加载,所以我添加了等待来检查元素是否是可见。

所以我的问题是:创建abstract class是否更好,它会实现WebElement并覆盖click()方法来添加一些等待功能,或者更好的只是只有等待在特定的页面?

3 个答案:

答案 0 :(得分:3)

根据文档Document Object Model (DOM) Level 2 HTML Specification click()方法,无参数,无返回值无异常

enter image description here

所以,很明显我们不能首先覆盖click()方法。

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

什么是ExplicitWait

根据documentation here ExplicitWait 是您为 WebDriver 实例定义,配置和实施的代码块在继续下一行代码之前等待某个条件得到满足。有一些方法可以帮助我们实施只需要等待的 ExplicitWait WebDriverWait ExpectedCondition 相结合,可以实现 ExplicitWait

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

答案 1 :(得分:0)

这不是一种正确的方法,可能因等待而发生的问题

  

1-对于每次点击活动,它会等待一段时间。

     

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

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

docs

WebDriver: check if an element exists?

答案 2 :(得分:0)

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

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

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