override WebElement click()
添加一些wait
功能是不错的做法,因为在某些页面中我需要点击按钮,在某些情况下,按钮尚未加载,所以我添加了等待来检查元素是否是可见。
所以我的问题是:创建abstract class
是否更好,它会实现WebElement并覆盖click()方法来添加一些等待功能,或者更好的只是只有等待在特定的页面?
答案 0 :(得分:3)
根据文档Document Object Model (DOM) Level 2 HTML Specification click()
方法,无参数,无返回值和无异常。
所以,很明显我们不能首先覆盖click()
方法。
但是您总是可以编写自定义用户函数来点击WebElement
以及某些类型的等待。在这些情况下,Selenium内置 Explicit Wait
,即 WebDriverWait
来帮助我们。
ExplicitWait
:根据documentation here, ExplicitWait
是您为 WebDriver
实例定义,配置和实施的代码块在继续下一行代码之前等待某个条件得到满足。有一些方法可以帮助我们实施只需要等待的 ExplicitWait
。 WebDriverWait
与 ExpectedCondition
相结合,可以实现 ExplicitWait
。
您可以在此Discussion中找到关于 ExplicitWait
的详细讨论。
答案 1 :(得分:0)
这不是一种正确的方法,可能因等待而发生的问题
1-对于每次点击活动,它会等待一段时间。
2-无论你给出的等待时间是什么,都可以在页面完全加载之前结束(它适用于某些页面,而其他页面则失败)
相反,您首先找到该元素并继续执行,请参阅以下问题以获取更多详细信息
答案 2 :(得分:0)
我认为你无法做到这一点,因为WebElement是一个接口而不是一个类(或抽象类)。
但是,如果您愿意,您可以实现自己的点击方法,等待然后点击给您。
public void waitAndClick(By identifer){
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement elem = wait.until(ExpectedConditions.presenceOfElementLocated(identifer));
elem.click();
}