Selenium Page Factory:如何通过嵌套选择器定位元素?
用Page Factory实现嵌套定位(替代ByChained)
方法1:使用@FindBys注解
@FindBys注解可以实现和ByChained一致的链式嵌套定位逻辑——每个@FindBy定义的定位器会在前一个定位器找到的元素范围内继续查找,最终返回匹配所有层级条件的元素列表。
对应你原来的ByChained代码,用Page Factory的写法如下(Kotlin):
import org.openqa.selenium.WebElement import org.openqa.selenium.support.FindBy import org.openqa.selenium.support.FindBys @FindBys( FindBy(className = "hb-card"), FindBy(className = "hb-card-header"), FindBy(className = "hb-card-tittel"), FindBy(tagName = "span") ) private lateinit var endreBoligModal: MutableList<WebElement>
这段代码的逻辑和你之前的ByChained完全一致:先找到所有class为hb-card的元素,再在每个这类元素下找class为hb-card-header的子元素,依次类推,最终返回最内层的span元素列表。
方法2:使用CSS选择器(更简洁)
如果层级关系明确,也可以直接用CSS选择器一次性描述嵌套结构,代码更紧凑:
@FindBy(css = ".hb-card .hb-card-header .hb-card-tittel span") private lateinit var endreBoligModal: MutableList<WebElement>
这里的CSS选择器通过空格表示后代元素关系,和链式定位的逻辑完全等价。
注意事项
- 必须确保Page Factory初始化时,已经调用
PageFactory.initElements(driver, this),否则注解定义的元素不会被实例化。 - 变量类型用
MutableList<WebElement>对应findElements的返回结果,和你原来的代码保持一致。
内容的提问来源于stack exchange,提问作者user9347168
相关产品推荐
相关产品推荐

