PageFactory和@FindBy注解的使用

举例:博客园的登陆页面:

非PageFactory 和@FindBy的代码如下

public class LoginPage1 {
//定义三个WebElement属性,用于记录用户名、密码、登陆按钮这三个页面元素
WebDriver driver;
WebElement username;
WebElement password;
WebElement loginbutton;
public LoginPage1(WebDriver driver){
this.driver = driver;
username = driver.findElement(By.id("input1"));
password = driver.findElement(By.id("input2"));
loginbutton = driver.findElement(By.id("signin"));
}
//定义一个login()方法,用于发送用户名和密码并登陆网站
public void login(String userName,String passWord){
username.sendKeys(userName);
password.sendKeys(passWord);
loginbutton.click();
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
}

}

PageFactory 和@FindBy的代码如下

public class LoginPage2 {
WebDriver driver;
//在页面中的任意一个页面元素都可以使用@FindBy注解来进行标记。
//@FindBy可用于替换drive.findElement()方法的查找机制来定位页面元素
@FindBy(how = How.ID,id = "input1")
WebElement username;
@FindBy(how = How.ID,id="input2")
WebElement password;
@FindBy(how = How.ID,id="signin")
WebElement loginbutton;

public LoginPage2(WebDriver driver){
this.driver = driver;
}
public void login(String userName,String passWord){
username.sendKeys(userName);
password.sendKeys(passWord);
loginbutton.click();
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
}
}

相比而言:使用了@FindBy注解模式的代码更清晰,在构造函数里面的@FindBy(how = How.ID,id = "xx")代替了一系列driver.findElement(By.id("xx"));

举例 发送消息

非PageFactor工厂模式

public void sendMessage(String toUser,String titleConent,String textConent){
enterMessageBox();
newMessage = driver.findElement(By.linkText("撰写新短信"));
newMessage.click();
SendMessagePage1 sendMessagePage = new SendMessagePage1(driver);
sendMessagePage.sendNewMessage(toUser, titleConent, textConent);
}

PageFactor工厂模式

public void sendMessage(String toUser,String titleContent,String textConten){
enterMessageBox();
newMessage.click();
SendMessagePage2 sendMessagePage = PageFactory.initElements(driver, SendMessagePage2.class);
sendMessagePage.sendNewMessage(toUser, titleContent, textConten);
}

相比而言:使用了PageFactor工厂模式的代码更清晰, PageFactory.initElements(driver, SendMessagePage2.class)代替了new SendMessagePage1(driver);实例化

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

PageFactory和@FindBy注解的使用的相关文章

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

PageObject模式实现页面元素分离

Page Object模式 Page Object将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 1.例如没有使用Page Object模式时对于163邮箱的登录操作代码如下: packagecom.test; importorg.openqa.selenium.By; importorg.openqa.selenium.WebDriver; importorg.openqa.selenium.WebElement; importorg.openqa.seleni

页面对象模式(1)

页面对象模式介绍: 页面对象模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率 1.1使用PageFactory 测试网址: https://mail.163.com/ 1.1.1使用PageFactory类给测试类提供待操作的页面元素 (1)新建两个包分别存放对象类.测试类 LoginPage类的源代码 package cn.pageobject; import org.openqa.selenium.WebDriver; im

selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别

selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行介绍 1)@FindBy @FindBy(id= "A") private WebElement A; 2)@FindBys @Findbys({ @FindBy(className = "A"), @FindBy(className = "B")

Selenium:注解@FindBy、@FindBys、@FindAll的用法

方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行介绍 1)@FindBy @FindBy(id= "A") private WebElement A; 多个元素用FindBy也可以 @FindBy(id = "userName") private List username; 2)@FindBys @Findbys({ @FindBy(className = "A"), @FindBy(class

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

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

Selenium的PageFactory知多少

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

Selenium的PageFactory & PageObject 知多少

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

浅析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