该随笔摘抄于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