带通配符的 Pagefactory 动态网络元素
Pagefactory dynamic webelement with wildcard
我动态生成定位符取决于将从列表中选择哪个元素。
例如,这是我生成的id:
Function:TableName:0:submenuAction
0 是计数器,表示从列表中选择第一个元素。计数器前后的所有字符串都不会改变,所以开始,包含 xpath 方法不起作用。
我可以使用一些通配符吗
Function:TableName:{X}:submenuAction
{x} 是整数。
我可以存储所选数量的元素,但如何在 pagefactory 元素中使用这个变量? driver.findelement 可能因 staleElementException 而失败,这就是我想使用 PageFactory 的原因。
无论您传入什么,都可能必须是常量(例如 Java 中的 final static
)才能在 PageFactory
注释中使用。
private final static int ITEM_INDEX = 2;
...
@FindBy(xpath="Function:TableName:"+ ITEM_INDEX + ":submenuAction")
private WebElement targetListItem;
除了评论中提到的一些过时检查策略之外,您可能还想尝试将所有这些动态识别的元素绑定到一个集合(例如 List<WebElement>
),然后在以下位置建立索引:
@FindBy(xpath="...")
private List<WebElement> allListEntries;
...
private WebElement getTargetListEntry(int index) {
return allListEntries.get(index);
}
我动态生成定位符取决于将从列表中选择哪个元素。
例如,这是我生成的id:
Function:TableName:0:submenuAction
0 是计数器,表示从列表中选择第一个元素。计数器前后的所有字符串都不会改变,所以开始,包含 xpath 方法不起作用。
我可以使用一些通配符吗
Function:TableName:{X}:submenuAction
{x} 是整数。
我可以存储所选数量的元素,但如何在 pagefactory 元素中使用这个变量? driver.findelement 可能因 staleElementException 而失败,这就是我想使用 PageFactory 的原因。
无论您传入什么,都可能必须是常量(例如 Java 中的 final static
)才能在 PageFactory
注释中使用。
private final static int ITEM_INDEX = 2;
...
@FindBy(xpath="Function:TableName:"+ ITEM_INDEX + ":submenuAction")
private WebElement targetListItem;
除了评论中提到的一些过时检查策略之外,您可能还想尝试将所有这些动态识别的元素绑定到一个集合(例如 List<WebElement>
),然后在以下位置建立索引:
@FindBy(xpath="...")
private List<WebElement> allListEntries;
...
private WebElement getTargetListEntry(int index) {
return allListEntries.get(index);
}