selenium自动化,关于PageObject设计模式

PageObject设计模式

  1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架。
  2. web测试时,建议强烈推荐使用_谷歌或_火狐浏览器。
  3. PageObject设计模式:是将某个页面的所有”元素(包含控件)属性”及”元素操作”封装在1个类(Class)里面~~~~
  4. 目的: 测试代码与被测页面对象代码分离,后期如果有页面元素发生了更改,只需要修改相应页面对象的代码(即对应Class文件),而不需要修改测试代码
  5. 尽量采用xpath方式来寻找页面元素,而不建议使用name,Link等方法; xpath是基于页面元素所处区域,一般不会发生变化,测试代码基本不受干扰.
  6. 将页面元素属性信息与代码分离,即与被测对象代码分离,目的也是为了进一步降低后续因页面变化带来的维护成本

以下是我的一个小的测试实例代码
Test—java工程名
src—源代码目录
CommonObject —–包名–存放公共类代码, 如 UseBrowser.java , 存放的操作chrome,firfox,ie等浏览器的相关代码
PageObject——–包名–存放页面对象(Page Object),以及相关的操作, 如 HomePageObject.java, 存放百度搜索主页的相关对象及操作方法
PagePath———-包名–存放页面对象元素的相关路径字符串文件, 如 PageElementPath.java, 存放百度搜索主页对象的路径字符串文件,
TestCases———包名–存放页面对象的测试案例的相关类, 如 NewTest.java , 存放的就是真正的测试案例, 调用方法,使用数据进行测试的类.

//公共类,操作浏览器相关的
package CommonObject;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class UseBrowser {
    public WebDriver driver;    
    //启动谷歌浏览器
    public WebDriver setupChrome(String test_url){     
    System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get(test_url);
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    return driver;
    }
    //启动火狐浏览器
    public WebDriver setupFirfox(String test_url){
//      System.setProperty("webdriver.firefox.bin","C:/Program Files(x86)/Mozilla Firefox/firefox.exe");
        driver = new FirefoxDriver();
        driver.get(test_url);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        return driver;
    }
    //启动IE浏览器
    public WebDriver setupIE(String test_url){   
     System.setProperty("webdriver.ie.driver", "C:\\Program Files\\Internet Explorer\\IEDriverServer.exe");
     DesiredCapabilities dc = DesiredCapabilities.internetExplorer();
     dc.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
     driver = new InternetExplorerDriver(dc);
     driver.get(test_url);
     return driver;
    }
    //关闭浏览器
    public void teardownBrowser(){
        driver.close(); 
    }   
}

=================================================================

//pageobject页面对象类,百度搜索页面的[输入框],[百度一下按钮]对象及操作
package PageObject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import PagePath.PageElementPath;

public class HomePageObject extends PageElementPath{    
    // 点击搜索栏
    public void click_Search_Bar(WebDriver driver){
        driver.findElement(By.id(search_bar_id)).click();
    }       
    // 搜索框输入
    public void input_Search_Box(WebDriver driver,String key_word){     
        driver.findElement(By.id(search_box_id)).clear();
        driver.findElement(By.id(search_box_id)).sendKeys(key_word);
        System.out.println("百度输入框已经成功输入的搜索内容:"+key_word);       
    }   
    //点击搜索按钮(百度一下)
    public void click_Search_Button(WebDriver driver){          
        driver.findElement(By.name(search_button_name)).click();
        System.out.println("click the 百度以下,success...");    
    }
}

====================================================================

//页面对象路径类, 百度一下页面的输入框,按钮的路径字符串
package PagePath;

public class PageElementPath {
    public String search_bar_id = "kw";
    public String search_box_id = "kw";
    public String search_button_name = "wd";
}

====================================================================

// 使用testng框架的测试类, 主要进行页面输入框,按钮的测试, 其中的测试数据也可以分离,暂时没有进行分离,
package TestCases;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;

import CommonObject.UseBrowser;
import PageObject.HomePageObject;

public class NewTest {
    HomePageObject page =new HomePageObject();
    UseBrowser browser = new UseBrowser();
    WebDriver drivers;

  @Test
  public void test_baidu() throws Exception {
      page.click_Search_Bar(drivers);
      page.input_Search_Box(drivers,"PageObject设计模式");
      Thread.sleep(10000);
      page.click_Search_Button(drivers);
  }
  @BeforeMethod
  public void beforeMethod() {
      System.out.println("Before method success....");

  }

  @AfterMethod
  public void afterMethod() {
      System.out.println("After Method success....");
  }

  @BeforeClass
  public void beforeClass() {
      System.out.println("Before Class success....");
  }

  @AfterClass
  public void afterClass() {
      System.out.println("After Class success....");
  }

  @BeforeTest
  public void beforeTest() {
      System.out.println("Before Test success....");
  }

  @AfterTest
  public void afterTest() {
      System.out.println("After Test success....");
  }

  @BeforeSuite
  public void beforeSuite() {
      drivers = browser.setupChrome("http://www.baidu.com/");
      System.out.println("Before Suite success....");
  }

  @AfterSuite
  public void afterSuite() {
      browser.teardownBrowser();
      System.out.println("After Suite success....");
  }
}

/**输入结果为
Before Suite success....
Before Test success....
Before Class success....
Before method success....
百度输入框已经成功输入的搜索内容:PageObject设计模式
click the 百度以下,success...
After Method success....
After Class success....
After Test success....
After Suite success....
*/

====================================================================

// 不使用testng框架的情况下, 可以使用java的main方法也可以进行测试.如下面
package PageObject;
import org.openqa.selenium.WebDriver;
import PageObject.HomePageObject;
import CommonObject.UseBrowser;

public class baidu_main_method{

    public static void main(String[]args) throws Exception{
        WebDriver drivers;  
        HomePageObject page = new HomePageObject();
        UseBrowser browser = new UseBrowser();

        drivers= browser.setupChrome("http://www.baidu.com/");
        page.click_Search_Bar(drivers);
        page.input_Search_Box(drivers,"PageObject设计模式");
        page.click_Search_Button(drivers);
        Thread.sleep(5000);
        browser.teardownBrowser();
    }
}

/*
百度输入框已经成功输入的搜索内容:PageObject设计模式
click the 百度以下,success...
*/
点赞