有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@Findby与利弊之争?

我创建了一个PageFactory框架,并开始使用@FindBy,但我对它知之甚少,而且读到这是一种高级方法

我意识到ExpectedConditions.presenceOfElementLocatedWebElements不起作用。所以我不得不使用不同的.visibilityOf,有时它不会对我的元素执行操作

所以我把它改成了By方法,现在定位器又能很好地工作了

By类在存储元素方面是否更健壮

哪一个更不容易出现问题@FindbyBy


共 (1) 个答案

  1. # 1 楼答案

    我只举了两个例子。第一个带注释,第二个不带注释。 有区别。如果页面的构造函数被调用PageFactory.initElements(driver,this);,它会检查页面上的所有元素。如果其中一些元素不存在,则无论给定测试是否需要该元素,它都会失败(动态页面)。下一个问题是测试失败。它不容易识别出失败的地方。它显示了页面,但没有堆栈跟踪的确切位置。 在第二个示例中,您可以很容易地找到失败的方法(位置)。此外,未调用且可能缺失的元素不会导致测试失败,除非调用了缺失/错误的元素

    带注释

    @FindBy(id = "lst-ib")
    private WebElement searchField;
    
    @FindBy(css = "input[name=\"btnK\"]")
    private WebElement searchButton;
    

    没有

    private static final String SEARCH_FIELD_ID = "lst-ib";
    private static final String SEARCH_BUTTON_CSS = "input[name=\"btnK\"]";
    

    在第一个例子中,它更容易被调用

    public void clickToSearchButton(){
    searchButton.click();
    }
    

    而在第二个例子中:

    public void clickToSearchButton(){
    driver.findElement(By.cssSelector(SEARCH_BUTTON_CSS)).click();
    }