PageFactory与@FindBy、@FindBys、@FindAll和@CacheLookup

一、@FindBy和@CacheLookup用法

代码实例

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); 
    }   
}

元素声明的写法,这三行是一个整体:

@FindBy(id="kw")
@CacheLookup
public WebElement keyword_input;

注解:
@FindBy:这个定义了你所查找的元素是以什么方式 定位的,比如图中我用的是id,那么就写成 @FindBy(id=”kw”),还有其他几种写法:@FindBy(name=”xx”)、@FindBy(className=”xx”)、@FindBy(xpath=”xxx”)、@FindBy(css=”xxx”)等

@CacheLookup:意思是说找到元素之后将缓存元素,重复的使用这些元素,将使测试的速度大大加快。

WebElement keyword_input:就是变量名

二、PageFactory

    public BDPage(WebDriver driver){
        PageFactory.initElements(driver, this); 
    }

PageFactory是为了支持页面设计模式而开发出来的,它的方法在selenium.support库里面。
它提供初始化页面元素的方法,如果页面存在大量的AJAX的技术,只要页面更新一次,它就好重新查找一次元素,所以不会出现StaleElementException这个error,
页面设计模式,可以提供你一个接口,然后你在这个接口上面,构建你自己项目中的页面对象,使用PageFactory使得测试更简单,更少的代码编写。
如果@FindBy没有指定,它会默认的查找id的属性,然后是name属性,如果还没有找到就会报错。 如果这个元素存在,我们不用担心它, pageFactory会初始化这个元素,不会报任何错误。

三:FindBy汇总

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

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

1)@FindBy

  1. @FindBy(id= "A")

  2. private WebElement A;

    扫描二维码关注公众号,回复: 12905586 查看本文章
  3.  

2)@FindBys

  1. @Findbys({

  2. @FindBy(className = "A"),

  3. @FindBy(className = "B")

  4. })

  5. public WebElement AB;

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

就像如下操作:

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

3)@FindAll

  1. @FindAll({

  2. @FindBy(id = "A"),

  3. @FindBy(id = "B")

  4. })

  5. public List<WebElement> aAndB;

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

猜你喜欢

转载自blog.csdn.net/weixin_45433031/article/details/113446504