你可能会用到的一些奇技淫巧1:定制WebDriver的annotation

这篇博客探讨了在PageObject模式下,如何通过自定义WebDriver的注解解决复杂页面元素管理问题。当元素过多时,除了页面分解,还可以将元素信息存储在文件中。文章详细介绍了WebDriver的@FindBy注解的工作原理,并展示了如何通过反射和元素定位工厂类生成WebElement。此外,还提到了利用JSON文件管理元素的可能性。
摘要由CSDN通过智能技术生成

熟悉PageObject模式的朋友一定对 FindBy,FindBys,FindAll 这三个annotation不陌生,借助这三个注解WebDriver提供了一种比较直观的元素管理的解决方案.

但是如果单一页面的元素比较多的时候,都写在一个类里反而不太好管理,这里我们可能会采用两种方式来解决

1 把页面再次分解

2 把元素的xpath等信息写在文件里.

页面分解很好理解,把一个复杂的页面分成若干个类来管理.但是把元素的信息写到文件里又会碰到一个问题,文件的读写.这里我们就可以用自定义annotation来解决。


首先我们先来了解一下,WebDriver是如何通过一个 @FindBy 来组合我们的元素的。提示:以下内容包含大量Java反射内容,最好有所了解.

假如 你有这么一个类

public class BaiduHomePage {

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

	@FindBy(id = "kw")
	private WebElement inputSearch;
	@FindBy(id = "su")
	private WebElement buttonSearch;

	public void searchByKeyWords(String keyWord) {
		inputSearch.clear();
		inputSearch.sendKeys(keyWord);
		buttonSearch.click();
	}
}

那么一切要从 

PageFactory.initElements(driver, this);
这一行开始说起

查看源码可以得知

  public static void initElements(WebDriver driver, Object page) {
    final WebDriver driverRef = driver;
    initElements(new DefaultElementLocatorFactory(driverRef), page);
  }

注意这里的

DefaultElementLocatorFactory

从名字看就可以知道这是一个元素定位工厂类,具体实现暂且不谈继续往下看

又调用了另一个方法

  public static void initElements(ElementLocatorFactory factory, O
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值