zoukankan      html  css  js  c++  java
  • 页面对象模型

    该随笔摘抄于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, 瞅瞅 人家写的多专业

  • 相关阅读:
    Codeforces Round #710 (Div. 3)
    Codeforces Round #708(Unrated on Div. 2)
    [JSOI2014]学生选课(二分+2-SAT)
    Educational Codeforces Round 103 (Rated for Div. 2)爆炸记
    AtCoder Beginner Contest 190
    GPU服务器centos7.4下安装jupyter后调用py文件以及调用失败的解决办法
    关于在centos7.4原来python2.7.5更新到python3.6或更高版本时注意事项
    Selenium初步应用
    CentOS利用docker安装MySQL5.7
    CentOS 常用命令
  • 原文地址:https://www.cnblogs.com/sailfan/p/10931485.html
Copyright © 2011-2022 走看看