selenium-PageFactory

上一篇 / 下一篇  2016-11-18 00:43:25 / 个人分类:selenium


   最近工作中发现PageFactory比以前用的Page object定位元素简洁、方便。

   PageFactory 的概念和Page Object应该类似,属于一种设计模式。属于Page Object的扩展,在构造函数里面调用PageFactory.initElements(driver, this);来初始化PO对象,避免WebElement过期。一旦pagePageFactory进行处理过,每一次操作的时候都会去更新其声明的WebElement使其是最新的。支持JAVApathoy于:org.openqa.selenium.support里面的。
   实例:
        类名:H5CarDetailPage

//查询首页所有car list列表

@FindBy(css="div.carlist_module.noneLastBorder>div>div>div.carlist_module__body>a")

public List<WebElement> carList;

测试类:H5CarDetailPageTest

H5CarDetailPage  h5cdpnull;

@Test(dataProvider = "test")

public void testJ10Yuyueshijia(Map<String,String> map){

        //初始化cdp

       h5cdp=PageFactory.initElements(driver, H5CarDetailPage.class);

        //打开H5微店首页

        cpo.get(driver, map.get("h5_site"));

        //点击H5首页car list1辆车

        List<WebElement> carlist=cpo.getElements(h5cdp.carList);

        //逻辑代码

  }

参考文档:

http://blog.sina.com.cn/s/blog_64693fd401018gw1.html

二、元素定位

1、selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径,

2、方式有3种:@FindBy@FindBys@FindAll。下文对3中类型的区别和使用场景进行介绍

1)@FindBy

   @FindBy(id= "A")

  private WebElement A;

2)@FindBys

  @Findbys({

  @FindBy(className = "A"),

  @FindBy(className = "B")})

  public WebElement AB;

 @FindBys相当于是取交集,是先根据第一个注解获取到对应元素,然后根据第二个注解再帅选出对应的页面元素,。如先找到符合classname=A的元素,再在这些元素集中找到classname=B的所有元素

就像如下操作:

driver.findElement(<By_FindByA>).findElement(<By_FindByB>).

3)@FindAll

@FindAll({

@FindBy(id = "A"),

@FindBy(id = "B")

})

public List<WebElement> aAndB;

@FindAll相当于是取并集,如找到id=Aid=B的所有元素