Selenium PageFactory

PageFactory是为了支持页面设计模式而开发出来的,它的方法在selenium.support库里面。

PageFactory它提供初始化页面元素的方法,如果页面存在大量的AJAX的技术,只要页面更新一次,它就好重新查找一次元素,所以不会出现StaleElementException这个error,

如果你不想要它每次都更新,你可以加上@CacheLookup.

页面设计模式,可以提供你一个接口,然后你在这个接口上面,构建你自己项目中的页面对象,使用PageFactory使得测试更简单,更少的代码编写。

如果@FindBy没有指定,它会默认的查找id的属性,然后是name属性,如果还没有找到就会报错。 如果这个元素存在,我们不用担心它, pageFactory会初始化这个元素,不会报任何错误。

先看个列子:

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.FindBy;

import org.openqa.selenium.support.PageFactory;

public class BaiduSearchPage {

  WebDriver driver;

  @FindBy(id = "kw")

  @CacheLookup

  WebElement searchField;

  @FindBy(id = "su")

  @CacheLookup

  WebElement searchButton;

  public BaiduSearchPage(WebDriver driver){

    this.driver = driver;

    PageFactory.initElements(driver,this);

  }

  public void inputText(String search){

    searchField.sendKeys(search);

  }

  public void clickButton(){

    searchButton.click();

  }

}

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class Test {

public static void main(String[] args) {

  BaiduSearchPage searchPage;

  WebDriver driver =new FirefoxDriver();

  driver.manage().window().maximize();

  driver.get("http://www.baidu.com");

  searchPage =new BaiduSearchPage(driver);

  searchPage.inputText("selenium");

  searchPage.clickButton();

  }

}

我们平时写查找元素,喜欢倾向于driver.findElement(by)这种方法,但是有的时候我们需要考虑查找失败,或者AJAX的情况,但是pageFactory就不需要,这使得查找页面元素更简单,快速。

基于页面设计对象, 我们可以编写更少的代码去完成更多的测试案例。

时间: 2024-10-09 00:21:34

Selenium PageFactory的相关文章

Selenium PageFactory使用

通过FindBy查找元素 @FindBy(id="notice01") private WebElement username; 相当于driver.findElement(By.id("notice01")); 示例: (1)测试类: import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; impo

Page Object Model

Page Object Model Framework which is also known as Page Object Design Pattern or Page Objects PO模式的最大优势是如果UI或者任何页面的HTML对象有了变化,测试并不需要任何改动.只有页面对象的代码受到了影响,却对测试代码无任何影响. Why? 想象一下当我们要处理100多个测试,包含了很多的stepDefinitions文件时项目中的代码行数会有多少?整个项目的代码将变得难以管理和维护.为了更好的管理

浅析selenium的PageFactory模式

前面的文章介绍了selenium的PO模式,见文章:http://www.cnblogs.com/qiaoyeye/p/5220827.html.下面介绍一下PageFactory模式. 1.首先介绍FindBy类: For example, these two annotations point to the same element: @FindBy(id = "foobar") WebElement foobar; @FindBy(how = How.ID, using = &q

[小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建

本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读下来并动手实践的话,我相信你应该可以模拟日常工作中80%常见的手动测试用例了.请注意:我的用词是模拟用例,而不是书写自动化测试用例.一个企业级的自动化测试的构建不是单靠Selenium一种技术就能Hold住的.所谓模拟指的是只能实现自动化的某个Case,但是不能工程化的使用.在本人所接触过几家公司的自动化测试

Selenium的PageFactory &amp; PageObject 在大型项目中的应用

因为最近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候就是拿来即用,写什么功能啊,就按手动的操作步骤去转换,近日看到一个文章,又去wiki上查了查,觉得写的不错就记录下来了. 在使用selenium做UI测试的时候,往往并不是页面的每个功能我们都要测试,总有一些经常要进行回归的功能,再细致一点的说,有一些节点是我们经常操作的,那么我从项目初期开始就进行自动化测试代码编写的话,我们可以设计适应项目的一套自动化测试代码结构,基本的思路就是对每一个页面

Selenium的PageFactory知多少

出路出路,走出去了,总是会有路的:困难苦难,困在家里就是难. 因为最近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候就是拿来即用,写什么功能啊,就按手动的操作步骤去转换,近日看到一个文章,又去wiki上查了查,觉得写的不错就记录下来了. 在使用selenium做UI测试的时候,往往并不是页面的每个功能我们都要测试,总有一些经常要进行回归的功能,再细致一点的说,有一些节点是我们经常 操作的,那么我从项目初期开始就进行自动化测试代码编写的话,我们可以

Selenium:使用PageFactory实现PagaObject设计模式

软件测试培训WebDriver为了支持PageObject模式,内置了一个PageFactory的工厂类.接下来本文通过一个案例来讲下如何使用PageFactory. 首先定义一个PageObject下面这个Class定义了一个页面对象通过工厂的方式将目标页面上的元素都定义好并且定义了一个当前页面的一个执行步骤[关键词搜索] package cn.testfan; import org.openqa.selenium.WebElement; import org.openqa.selenium.

Selenium的PageFactory &amp; PageObject 知多少

出路出路,走出去了,总是会有路的:困难苦难,困在家里就是难. 因为最近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候就是拿来即用,写什么功能啊,就按手动的操作步骤去转换,近日看到一个文章,又去wiki上查了查,觉得写的不错就记录下来了. 在使用selenium做UI测试的时候,往往并不是页面的每个功能我们都要测试,总有一些经常要进行回归的功能,再细致一点的说,有一些节点是我们经常操作的,那么我从项目初期开始就进行自动化测试代码编写的话,我们可以设

selenium(六)Page Object模式(使用selenium的PageFactory)

PageObject 类 import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class PageObject { private String url="http://www.baidu.com&qu