@FindBys与@FindAll的作用及XPath替代实现咨询
@FindBys 和 @FindAll 的作用与差异解析
Hey,我来给你理清楚Selenium里@FindBys和@FindAll这俩注解的作用,还有它们最核心的差异——我自己专门做过测试验证,结果一目了然:
一、核心作用与逻辑差异
@FindBys:用来组合多个@FindBy定位条件,所有条件是AND(且)的关系——只有同时满足所有指定条件的元素,才会被筛选出来。@FindAll:同样是组合多个@FindBy条件,但所有条件是OR(或)的关系——只要元素满足其中任意一个条件,就会被匹配到。
二、实际测试验证
我写了一段代码来验证这个逻辑:
// AND逻辑:同时匹配name="username"和name="password"的元素(页面中不存在这样的元素,所以返回0个) @FindBys( { @FindBy(name="username"), @FindBy(name="password") } ) List<WebElement> totWeAnd; // OR逻辑:匹配name="username" 或者 name="password"的元素(页面中各有一个,所以返回2个) @FindAll( { @FindBy(name="username"), @FindBy(name="password") } ) List<WebElement> totWeOr;
测试结果完全符合预期:totWeAnd返回了0个WebElement,totWeOr返回了2个WebElement。
三、替代实现方式
你说得没错,这俩注解的功能确实可以通过@FindBy配合XPath表达式来实现:
- 对应
@FindBys的AND逻辑,XPath写法示例:@FindBy(xpath = "//*[@name='username' and @name='password']") - 对应
@FindAll的OR逻辑,XPath写法示例:@FindBy(xpath = "//*[@name='username' or @name='password']")
不过相比XPath,用@FindBys和@FindAll的优势在于代码可读性更强,尤其是当定位条件比较多的时候,拆分的注解写法比冗长的XPath表达式要清晰好维护得多。
内容的提问来源于stack exchange,提问作者J_Coder
相关产品推荐
相关产品推荐

