该随笔摘抄于https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
该随笔摘抄于https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
该随笔摘抄于https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
摘抄目的是自己以后方便找, 方便看
1 Page Object Model(POM) 是selenium webdriver中Object Repository设计模式
2 使用这种方式的好处在于解耦和, 代码可重用性高
3 PageFactory是POM概念中创建对象存储库的优化方法,
emmmmmmmmmmmmmmmmmm
页面对象这种写法各有各的写法, 咱不敢说谁的就一定是好的, 谁的一定是不好的, 我在看selenium python文档(https://selenium-python-zh.readthedocs.io/en/latest/page-objects.html), 这儿写的时候对象仓库和操作方法, 测试用例, 都单独封装了,
网上pageObject 写法也是形形色色,我个人感觉 https://selenium-python-zh.readthedocs.io/en/latest/page-objects.html 这儿要更好一点
eg. 这段代码是不使用pagefactory, 页面对象类, 由于这个类的构造器只有一个参数, webdriver, 所以在这个类必须要有一个webdriver才可以实例化, 就如其实我并没有看明白为什么一定要把webdriver作为构造参数传入,因为在哪儿初始化浏览器对象都是可以的 , 这儿的一些页面的公共方法可以抽取到外面, 在封装一个类, 这儿使用的是原生的 By index = By.name("index"); 方法查找元素
package org.lwf.auto;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99Login {
WebDriver webDriver;
By gurn99UserNmae = By.name("uid");
By gurn99Password = By.name("password");
By gurn99Titletext = By.className("barone");
By login = By.name("btnLogin");
// 初始化浏览器
public Guru99Login(WebDriver webDriver) {
this.webDriver = webDriver;
}
// 设置UserName
public void setUserName(String strUserName){
System.out.println("find userName method invoke");
webDriver.findElement(gurn99UserNmae).sendKeys(strUserName);
}
// 设置密码
public void setPassword(String strPassword){
webDriver.findElement(gurn99Password).sendKeys(strPassword);
}
// 点击登录按键
public void clickLogin(){
webDriver.findElement(login).click();
}
// 获取title
public String getLoginTitle(){
// return webDriver.findElement(gurn99Titletext).getText();
return webDriver.getTitle();
}
// 登录
public void loginToGun99(String username, String password){
this.setUserName(username);
this.setPassword(password);
this.clickLogin();
}
void quitBrower(){
webDriver.quit();
}
}
测试用例
package org.lwf.auto;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class TestGrun99Login {
private static Logger logger = Logger.getLogger(TestGrun99Login.class);
WebDriver webDriver;
Guru99Login loginPage;
Guru99HomePage homePage;
@BeforeTest
public void setUpTest(){
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ikan\\Downloads\\chromedriver_win32\\chromedriver.exe");
webDriver = new ChromeDriver();
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
webDriver.get("http://demo.guru99.com/V4/");
}
@Test
public void testLoginGun99(){
Guru99Login login = new Guru99Login(webDriver);
login.loginToGun99("mgr123", "mgr!23");
logger.debug("Current Page Title is"+login.getLoginTitle());
login.quitBrower();
}
}
以下是pom使用pagefactory优化方法
package org.lwf.auto;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class FactoryGurnLogin {
/**
* Page Factory 是selenium WebDriver的内置页面对象模型概念,但他已经经过优化 页面对象存储库和对象方法分离,
* 在PageFactory类的帮助下,我们使用@FindBy注释来查找WebElment,
* 我们使用initElement方式初始化web元素 @FindBy可以接受tagName,partialLinkText,name,
* linkText,id,css,className,xpath作为属性。
*/
WebDriver driver;
@FindBy(name = "uid")
WebElement grun99userName;
@FindBy(name = "password")
WebElement grun99passWord;
@FindBy(name="btnLogin")
WebElement grun99login;
public FactoryGurnLogin(WebDriver driver) {
super();
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void setUserName(String userNmae) {
grun99userName.sendKeys(userNmae);
}
public void setPassWord(String passWord) {
grun99passWord.sendKeys(passWord);
}
public void clickLogin(){
this.grun99login.click();
}
public String currentPageTitle(){
return driver.getTitle();
}
public void closeBrower(){
driver.close();
}
public void loginToGuru99(String userName, String passWord){
this.setUserName(userName);
this.setPassWord(passWord);
this.clickLogin();
}
}
测试用例
package org.lwf.auto;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class Test99GurnLoginWithPageFactory {
WebDriver webDriver;
FactoryGurnLogin factoryGurnLogin;
@BeforeTest
public void beforeTest(){
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ikan\\Downloads\\chromedriver_win32\\chromedriver.exe");
webDriver = new ChromeDriver();
webDriver.get("http://demo.guru99.com/V4/");
}
@Test
public void test1(){
factoryGurnLogin = new FactoryGurnLogin(webDriver);
String title = factoryGurnLogin.currentPageTitle();
System.out.println(title);
factoryGurnLogin.loginToGuru99("mgr123", "mgr!23");
String title2 = factoryGurnLogin.currentPageTitle();
Assert.assertEquals(title, title2);
}
}
GitHub地址:https://github.com/SailFan/auto
实在没啥写的, 还不如记下这个地址, 什么不会搂一眼就行了, 但是挺烦的是现在的有些2 13 , 问的时候总喜欢问你几个不知道的方法, 然后别人回答不上来就感觉自己很牛逼的样子, 这种人啊, *************************************************************
https://www.guru99.com/upload-download-file-selenium-webdriver.html, 瞅瞅 人家写的多专业
原文:https://www.cnblogs.com/sailfan/p/10931485.html