Selenium WebDriver与@FindBy和findElement()的区别

时间:2016-03-14 06:21:28

标签: selenium selenium-webdriver

我浏览了很多博客和网站,以获取有关POM(页面对象模型)的更多信息。但是,一些博客提供了使用@FindBy和PageFactory获取Web元素的示例,一些博客创建了WebElement编写的方法,并使用下面给出的findElement()方法查找元素:

 1. @FindBy(id="clickhere")
    WebElement linkClickHere;

     public classconstructor(WebDriver driver){
        return PageFactory.initElements(driver, classname.class);
     }

 2. public static WebElement lnk_MyAccount(WebDriver driver){
       return driver.findElement(By.id("clickhere"));
    }

据我所知,使用工厂我们在执行脚本之前获取网页的所有元素,从第二点开始,它在脚本执行时查找元素,如果我错了则纠正我。

现在,我们应该使用哪一个?哪个是最好的?这两个有什么区别吗?这两个有什么优势和劣势?

我很感激您的意见......

1 个答案:

答案 0 :(得分:2)

PageFactory是Selenium提供的一种干净的编码解决方案,用于支持页面对象模型。不,它在执行之前并没有获得所有Web元素,因为它只提供透明代理,而不是Web元素的具体实例。因此,当您第一次对元素执行某些操作时,您将获得实际实例的全新副本,而不是之前的任何内容。所以在这方面,PageFactory并没有处于劣势。

findElement()相比,PageFactory的唯一缺点是您无法通过Web元素的WrappedDriver属性获取Web驱动程序,因此您必须自己跟踪驱动程序实例。但除此之外,PageFactory是一种实现POM的简洁,干净的方式,应尽可能使用。