当前位置: 首页 > 知识库问答 >
问题:

JAVA Selenium WebElement重写click()方法

益何平
2023-03-14

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

所以我的问题是:是更好地创建抽象类,它将实现WebElement并覆盖单击()方法来添加一些等待功能,还是只在特定页面中使用普通等待更好?

共有3个答案

海翔宇
2023-03-14

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

然而,如果您愿意,您可以实现自己的click方法,它不需要等待,然后为您单击。

public void waitAndClick(By identifer){
    WebDriverWait wait = new WebDriverWait(driver, 30);
    WebElement elem = wait.until(ExpectedConditions.presenceOfElementLocated(identifer));
    elem.click();
}
子车凌龙
2023-03-14

这不是一个正确的做法这可能会出现的问题由于等待

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

2-无论您等待多长时间,都可能在页面完全加载之前结束(对于某些页面有效,而对于其他页面则失败)

相反,您可以先找到该元素,然后继续执行。有关更多详细信息,请参见下面的问题

WebDriver:检查元素是否存在?

Selenium WebDriver-测试元素是否存在

段干楚青
2023-03-14

根据留档文档对象模型(DOM)2级超文本标记语言规范,单击()方法不接受任何参数,不返回任何值,也不报告任何异常。

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

但是,您始终可以编写一个定制的用户函数来单击WebElement,同时执行某些类型的等待。在这些情况下,Selenium内置显式等待,即WebDriverWait来帮助我们。

根据留档,一个显式等待是一个代码块,您定义,配置和实现WebDriver实例,等待满足某一条件,然后继续下一行代码。有一些方法可以帮助我们实现显式等待,只要需要就会等待。结合预期条件的WebDriver等待是实现显式等待的方法之一。

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

 类似资料:
  • subA类是A类的子类。我试图重写一个方法,但不知怎的,它不允许我重写它。为什么会这样?是因为参数中的参数吗? 读取错误消息: 名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不重写另一个,其中E#1、E#2是类型变量: E#1扩展了subA类中声明的对象 E#2扩展了A类中声明的对象 超类A: 子类subA:

  • 在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为 方法重写(override),又称为 方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。 子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。 在重写方法时,需要遵循

  • 我有一个库类中的案例,我想覆盖方法以减少我需要传递的参数数量以对其进行模式匹配。我这样做: 但我希望它只返回。这有什么问题?

  • 下面是这本书的一段话: 覆盖方法不得抛出比覆盖方法声明的异常新的或更广泛的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException、Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。 现在我的问题是,如果超类中的方法抛出一个异常,那么重写方法能否根本不抛出一个异常? 因为我刚刚在Java中尝试

  • 这里我有两个类DemoParent和DemoChild,它们扩展了DemoParent,在DemoParent中我有通用方法m1(int I),但在DemoChild中我有varargs方法m1(int…I)。当我创建子类的对象并调用m1方法时,它会给我父类方法输出。请参见下面的输出。o/p-母公司 有人能解释为什么父类方法总是从子类引用调用,即使子类具有相同的方法? 但是如果我们反向代码,即父类

  • 问题内容: 我正在记录我已经开发的Java程序,并且想知道如果仅记录超类,是否将为继承的方法(被重写)生成JavaDoc? 如果我有一个用方法调用的类,而有一个用该方法重写的子类,那么如果Car类中没有放置Javadoc,Carss驱动方法中是否会包含Vehicles驱动方法的文档? 问题答案: [I]想知道如果我仅记录超类,是否将为继承的方法(被重写)生成JavaDoc? 是。如果在子类上没有j