2016-03-14 62 views
0

我已经浏览了很多博客和网站以获取关于POM(Page Object Model)的更多信息。然而,一些博客的使用提供了与@FindBy例子PageFactory用于获取的Web元素和一些博客有创造与WebElement书面和发现使用findElement()方法元素的方法下面给出:Selenium WebDriver @FindBy和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")); 
    } 

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

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

我很感激你的投入....

+0

看看下面的主题:1. http://stackoverflow.com/questions/17819905/selenium-difference-between-findby-and-webelement-findelement 2. http://stackoverflow.com/questions/ 21723730/when-do-find-attributes-trigger-a-driver-findelement 3. http://stackoverflow.com/questions/17819905/selenium-difference-between-findby-and-webelement-findelement –

回答

2

PageFactory是硒提供支持的页面对象模型干净的编码解决方案。不,它不会在执行之前获得所有的Web元素,因为它仅为您提供透明的代理,而不是Web元素的具体实例。因此,当您首次对元素进行操作时,您会得到实际实例的全新副本,而不是之前的任何副本。所以在这方面,PageFactory没有缺点。

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

+0

是更好的方法如果我使用2选项创建POM?问题是我将变量中的locator值传递给FindBy,因此它需要一个常量变量,因为它有静态关键字,所以它不能在类的构造函数中初始化...我有存储在Excel表格中的locator的值,所以我更新了在excel表格和脚本中进行更改从Excel表格中读取,而不是开始执行 – Learner

+0

如果将定位器存储在Excel工作表中,那么这当然是与PageFactory完全不同的方法,其中定位器位于FindBy语句中,再次需要一个恒定的价值。所以你的方法绝对好,但不会与PageFactory一起使用。 –

+0

也许是对哲学的另一种想法:POM对我来说意味着与页面相关的所有内容都集中在一个地方,这就是页面的类文件。通过将定位器存储在Excel工作表中,您可以打破此范例。我不想说这是一件坏事。这只是一个专业程序员应该考虑和注意的事情。 –

相关问题