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, 瞅瞅 人家写的多专业

  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/sailfan/p/10931485.html
Copyright © 2011-2022 走看看