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

在我自己的类中使用@findby,而不是在WebElement中使用

高寒
2023-03-14

是否可以不仅在WebElement中使用@findby,而且在我自己的类中也使用@findby?

我想有我的类用于与页面元素合作,并在其中重写WebElement接口的一些方法。

public class NamedElement implements WebElement {
    public boolean isDisplayed(){
        try{
            return element.isDisplayed();
        } catch (NoSuchElementException noElement) {
            return false;
        }
    }
@FindBy(xpath = ".//a[contains(text(), 'Log in')]")
public NamedElement loginButton;

但我发现了错误:

java.lang.IllegalArgumentException: Can not set lenovo.tests.page.NamedElement field lenovo.tests.page.NCBLoginPage.loginButton to com.sun.proxy.$Proxy9
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:764)
at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:116)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:104)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:91)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:78)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:64)
at lenovo.tests.step.NCBLoginStep.<init>(NCBLoginStep.java:20)

您能告诉我重写WebElement方法并使用我的.isdispalyed()方法的正确方法吗?我想继续使用@findby注释。

共有1个答案

戚成礼
2023-03-14

这里的这个答案是在描述你想要的东西。他在这篇博客中记录了创建自己的PageFactory的方法--这是要走的路。至少我们(在工作中)正是这样做的。我们的目标是在每个WebElement方法上有一个自动重试,而不是讨厌的StaleElementReferenceExceptions,如果Chrome不能自己处理它,则将元素自动滚动到视图中。;-)

 类似资料:
  • 我试图在我自己的包中使用data.table包。MWE如下:

  • Selenium FindBy注释是否实际实例化了WebElement实例,如果是,使用它们的框架的内涵是什么? 我在我的页面对象中所做的事情现在看起来是这样的。我的所有测试框架方法都将定位器作为参数(而不是WebElement实例)。 我的问题是,在类实例化时使用FindBy实例化WebElement实例吗?如果是这样,那么我怀疑我的框架方法需要使用WebElement实例。这是正确的吗,在框架

  • 我正在创建一个页面对象框架,在了解其概念的同时,我了解到页面工厂(@FindBy)与页面对象一起使用。然而,当我可以使用驱动程序时,我无法理解为什么我需要使用@FindBy。在页面对象类中使用我的定位器完成删除。例如: //使用@FindBy编码 //带有driver.find元素的代码 这里的两个代码之间有什么区别,因为两个代码基本上都在做相同的事情?

  • 下面是一个示例项目:http://cl.ly/3N2u2i1S441M 我在一个UITableViewCell超类中,因为当子类被初始化时,我调用super。init()。在子类和超类的init的底部,我调用了一个方法,调用styleCell,对其应用样式。该方法来自于它们都符合的协议,其中一个隐式符合,因为它是子类,并且覆盖了该方法。 在超类'的末尾,调用该样式方法,但它调用子类'方法,而不是它

  • 我有一个python应用程序要测试。此应用程序正在导入许多包,例如: 其中mypackage是我自己的包。 当我开始应用程序时,一切正常。然而,一旦我试图运行毒物测试它,我就会得到以下错误: 我知道tox无法安装mypackage依赖项,因为它不在pip中。您知道如何在此类应用程序上运行tox,或者如何使用tox安装自己的软件包吗? 我的tox.ini文件内容:

  • persistence.xml文件 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>org.hibernate.ejb.hibernatePersistence