• selenium2 页面对象模型Page Object


    开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来。同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。

    // 定义百度搜索的输入框
    	@FindBy(id = "kw")
    	@CacheLookup
    	public WebElement keyword_input;
    

      三行代码定义一个元素,是一个整体

    @FindBy: 定义了你所有查找的元素是以什么方式定位的,此处用的是id,还可以用@FindBy(name = "xx"), @FindBy(className = "xx"), @FindBy(xpath = "xx"), @FindBy(css = "xx")等。

    @CacheLookup:即找到元素之后就缓存元素,重复使用的时候可以加快测试速度

    WebElement keyword_input:变量名

    分离页面元素:

    BDPage.java文件内容:

    package page;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.CacheLookup;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.PageFactory;
    
    public class BDPage {
    	// 定义百度搜索的输入框
    	@FindBy(id = "kw")
    	@CacheLookup
    	public WebElement keyword_input;
    
    	// 定义百度搜索的搜索按钮
    	@FindBy(id = "su")
    	@CacheLookup
    	public WebElement search_button;
    
    	// 构造函数来初始化元素,即将元素映射到定义好的变量上
    	public BDPage(WebDriver driver) {
    		PageFactory.initElements(driver, this);
    	}
    }
    

    BDPageTest.java文件代码:
    package test;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    import page.BDPage;
    
    public class BDPageTest {
    	WebDriver driver;
    
    	@Test
    	public void f() {
    		BDPage bdp = new BDPage(driver);
    		bdp.keyword_input.sendKeys("hello");
    		bdp.search_button.click();
    	}
    
    	@BeforeTest
    	public void beforeTest() {
    		driver = new FirefoxDriver();
    		driver.manage().window().maximize();
    		driver.get("https://baidu.com");
    	}
    
    	@AfterTest
    	public void afterTest() {
    		driver.quit();
    	}
    
    }
    

      

    即使实现的分离页面元素,也同样可以分离页面操作,即把一些操作封装到对应页面中。

     以下是打开百度主页,并输入“selenium”点击查询按钮的测试用例

     BaiDuPage.java文件代码:

    package page;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.CacheLookup;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.PageFactory;
    
    public class BaiDuPage {
    
    	// 定义百度搜索的输入框
    	@FindBy(id = "kw")
    	@CacheLookup
    	private WebElement BD_INPUT_KEYWORD;
    
    	// 定义百度搜索的搜索按钮
    	@FindBy(id = "su")
    	@CacheLookup
    	private WebElement BD_BUTTON_SEARCH;
    
    	private final String url = "https://baidu.com";
    	private static WebDriver driver;
    
    	// 提供一个外部获得driver的方法
    	public WebDriver getDriver() {
    		return driver;
    	}
    
    	// 构造函数来初始化元素,即将元素映射到定义好的变量上
    
    	public BaiDuPage() {
    		driver = new FirefoxDriver();
    		PageFactory.initElements(driver, this);
    	}
    
    	public void close() {
    		driver.quit();
    	}
    
    	public void openUrl() {
    		driver.get(url);
    	}
    
    	public void searchByKeyword() {
    		BD_INPUT_KEYWORD.sendKeys("selenium");
    		BD_BUTTON_SEARCH.click();
    	}
    
    }
    BaiDuPageTest.java文件代码:
    package test;
    
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    import page.BaiDuPage;
    
    public class BaiDuPageTest {
    
    	@Test
    	public void f() {
    		BaiDuPage baidupage = new BaiDuPage();
    		baidupage.openUrl();
    		baidupage.searchByKeyword();
    		baidupage.close();
    	}
    
    	@BeforeTest
    	public void beforeTest() {
    
    	}
    
    	@AfterTest
    	public void afterTest() {
    
    	}
    }
    

      

     页面嵌套对象

    使用页面嵌套对象,可以简化测试用例的步骤。

    a、打开百度页面

    b、输入“selenium关键字”
    c、在搜索结果页面的搜索框中检查输入的文本是不是“selenium”
    BaiDuPage.java :存储页面元素,相关操作以及嵌套ResultPage对象
    ResultPage.java : 存储页面元素以及相关操作
    BaiDuPageTest: 执行测试,检查结果

    BaiDuPage.java

    package page;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.CacheLookup;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.PageFactory;
    
    public class BaiDuPage {
    
    	// 定义百度搜索的输入框
    	@FindBy(id = "kw")
    	@CacheLookup
    	private WebElement BD_INPUT_KEYWORD;
    
    	// 定义百度搜索的搜索按钮
    	@FindBy(id = "su")
    	@CacheLookup
    	private WebElement BD_BUTTON_SEARCH;
    
    	private final String url = "https://baidu.com";
    	private static WebDriver driver;
    
    	// 提供一个外部获得driver的方法
    	public static WebDriver getDriver() {
    		return driver;
    	}
    
    	// 构造函数来初始化元素,即将元素映射到定义好的变量上
    
    	public BaiDuPage() {
    		driver = new FirefoxDriver();
    		PageFactory.initElements(driver, this);
    	}
    
    	public void close() {
    		driver.quit();
    	}
    
    	public void openUrl() {
    		driver.get(url);
    	}
    
    	public ResultPage searchByKeyword(String keyword) {
    		BD_INPUT_KEYWORD.sendKeys(keyword);
    		BD_BUTTON_SEARCH.click();
    		return new ResultPage();
    	}
    }
    

      ResultPage.java

    package page;
    
    import junit.framework.Assert;
    
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.CacheLookup;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.PageFactory;
    
    public class ResultPage {
    
    	// 定义百度搜索结果界面的输入框
    	@FindBy(id = "kw")
    	@CacheLookup
    	private WebElement RP_INPUT_KEYWORD;
    
    	public ResultPage() {
    		PageFactory.initElements(BaiDuPage.getDriver(), this);
    	}
    
    	public void checkKeyword() {
    		Assert.assertEquals(RP_INPUT_KEYWORD.getAttribute("value"), "selenium");
    	}
    }
    

      BaiDuPageTest.java

    package test;
    
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    import page.BaiDuPage;
    
    public class BaiDuPageTest {
    
    	@Test
    	public void searchTest() {
    		BaiDuPage baidupage = new BaiDuPage();
    		baidupage.openUrl();
    		baidupage.searchByKeyword("selenium").checkKeyword();
    		baidupage.close();
    	}
    
    	@BeforeTest
    	public void beforeTest() {
    
    	}
    
    	@AfterTest
    	public void afterTest() {
    
    	}
    }
    

      

  • 相关阅读:
    弄明白python reduce 函数
    Linux 下载百度网盘大文件
    java 从网上下载文件的几种方式
    Windows下Python2与Python3两个版本共存的方法详解
    python 学习笔记
    Glide实现查看图片和保存图片到手机
    Android Animation 知识点速记备忘思维导图
    You must not call setTag() on a view Glide is targeting when use Glide
    前端数据流哲学
    精读《Optional chaining》
  • 原文地址:https://www.cnblogs.com/yajing-zh/p/5078157.html
Copyright © 2020-2023  润新知