zoukankan      html  css  js  c++  java
  • 【框架】PageObject(一)

    1.目的:为了将元素的find方法和业务逻辑分开来。如果元素的页面位置发生了变化,只需改动一个文件,而不影响业务的实现。

    2.原理:一般一个页面对应一个class,在class里描述所有要用到的webelement。通过PageFactory.initWebElement(Webdriver d,this)的方法来实例化页面对象。

    每次在用到一个元素的时候,会在当前页面搜索,如果第二次再用到这个元素,则会再次寻找。如果一个元素在页面的任何地方都不会变,则可以再@FindBy方法的下方写上@CacheLookup,则会被缓存起来,这样可以提高搜索效率

    3.例子:登录163邮箱,在163的写信页面,先点击写信按钮,然后在收件人里填写对应信息

    //【1】元素类---登录页面

    public class Login163VO {
     @FindBy(id="idInput")
     public WebElement username ;
     
     @FindBy(id="pwdInput")
     public WebElement password ;
     
     @FindBy(id="loginBtn")
     public WebElement loginBtn ;
     
     public Login163VO(WebDriver driver){
      PageFactory.initElements(driver,this);
     }

    }

    //【2】元素类---写信页面

    public class Send163VO {

    //通过xpath方法,找到写信按钮
     @FindBy(xpath="//div[@id='dvNavTop']/ul/li[2]")

    //把该按钮缓存起来
     @CacheLookup
     public WebElement xiexin ;

    //通过xpath方法,找到收件人输入框。这个按钮是点击写信按钮后才显示的。但是使用PageObject方法不受影响,因为在使用到该元素时,才会去搜索,并且调用该元素,是在点击了写信按钮以后
     @FindBy(xpath="//div[@id='divComposeto']/div/div/div[2]/div/input")
     public WebElement shoujianren;
     //使用PageObject方法,实例化页面元素
     public Send163VO(WebDriver driver){
      PageFactory.initElements(driver, this);
     }
    }

    //【3】测试类--使用了testng
    public class Test163 {
     WebDriver driver = null;
     Login163VO t = null;
     Send163VO s = null;
     
     @BeforeClass
     public void setUp(){
      driver= new FirefoxDriver();
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      driver.get("http://mail.163.com");
     }
     
        @Test
        public void testLogin163() throws InterruptedException { 
         t = new Login163VO(driver);
         t.username.sendKeys("name@163.com");
         t.password.sendKeys("pass");
         t.loginBtn.click();
        Thread.sleep(3000); 
      }
       
        @Test
        public void testXiexin163(){
         s = new Send163VO(driver);
         s.xiexin.click();
         s.shoujianren.sendKeys("name@126.com");
       }
       

     @Test(enabled=false)//不会执行的类,暂时没有实现好的类
        public void tearDown(){
         driver.quit();
       }

    }

  • 相关阅读:
    seaborn基础整理
    matplotlib基础整理
    pandas基础整理
    numpy基础整理
    二分算法的应用——不只是查找值!
    二分算法的应用——Codevs 1766 装果子
    数据挖掘实战(二)—— 类不平衡问题_信用卡欺诈检测
    数论:素数判定
    MySQL学习(二)——MySQL多表
    MySQL学习(一)——Java连接MySql数据库
  • 原文地址:https://www.cnblogs.com/Jourly/p/3699203.html
Copyright © 2011-2022 走看看