Java 带有通配符的Pagefactory动态webelement
我动态生成的定位器取决于从列表中选择哪个元素 例如,这是我生成的id:Java 带有通配符的Pagefactory动态webelement,java,selenium,selenium-webdriver,pageobjects,page-factory,Java,Selenium,Selenium Webdriver,Pageobjects,Page Factory,我动态生成的定位器取决于从列表中选择哪个元素 例如,这是我生成的id: Function:TableName:0:submenuAction 0是计数器,表示从列表中选择第一个元素。计数器前后的所有字符串都不会更改,因此从开始,contains xpath方法不起作用 我能用一些通配符吗 函数:TableName:{X}:子菜单{X}是整数 我可以存储所选数量的元素,但如何在pagefactory元素中使用此变量?driver.findelement可能会因staleElementExcept
Function:TableName:0:submenuAction
0是计数器,表示从列表中选择第一个元素。计数器前后的所有字符串都不会更改,因此从开始,contains xpath方法不起作用
我能用一些通配符吗
函数:TableName:{X}:子菜单
{X}是整数
我可以存储所选数量的元素,但如何在pagefactory元素中使用此变量?driver.findelement可能会因staleElementException而失败,这就是我想使用PageFactory的原因。无论您传入什么,都可能必须是常量(例如Java中的
最终静态
)才能在PageFactory
注释中使用
private final static int ITEM_INDEX = 2;
...
@FindBy(xpath="Function:TableName:"+ ITEM_INDEX + ":submenuAction")
private WebElement targetListItem;
除了注释中提到的一些过时的检查策略外,您可能还希望尝试将所有这些动态标识的元素绑定到集合(例如,列表
),然后索引:
@FindBy(xpath="...")
private List<WebElement> allListEntries;
...
private WebElement getTargetListEntry(int index) {
return allListEntries.get(index);
}
@FindBy(xpath=“…”)
私有列表所有列表项;
...
私有WebElement getTargetListEntry(int索引){
返回allListEntries.get(索引);
}
无论您传入什么,都可能必须是一个常量(例如Java中的最终静态
),才能在页面工厂注释中使用
private final static int ITEM_INDEX = 2;
...
@FindBy(xpath="Function:TableName:"+ ITEM_INDEX + ":submenuAction")
private WebElement targetListItem;
除了注释中提到的一些过时的检查策略外,您可能还希望尝试将所有这些动态标识的元素绑定到集合(例如,列表
),然后索引:
@FindBy(xpath="...")
private List<WebElement> allListEntries;
...
private WebElement getTargetListEntry(int index) {
return allListEntries.get(index);
}
@FindBy(xpath=“…”)
私有列表所有列表项;
...
私有WebElement getTargetListEntry(int索引){
返回allListEntries.get(索引);
}
在更改页面的DOM状态后尝试访问任何元素时,通常会发生过时元素错误。因此,如果您想使用任何元素,您应该立即获得引用,然后可以执行任何操作。为了更好地理解这个场景,我编写了一些用于触发stale元素错误的伪代码。1.获取页面上任何元素的引用(driver.findelement(..)2。刷新页面(driver.manage.navigate.refresh())3。现在尝试单击该元素(element.click())-->您将遇到陈旧元素错误。通常,在更改页面的DOM状态后尝试访问任何元素时,都会发生陈旧元素错误。因此,如果您想使用任何元素,您应该立即获得引用,然后可以执行任何操作。为了更好地理解这个场景,我编写了一些用于触发stale元素错误的伪代码。1.获取页面上任何元素的引用(driver.findelement(..)2。刷新页面(driver.manage.navigate.refresh())3。现在尝试单击该元素(element.click())-->您将遇到陈旧元素错误。问题是,它必须是常量。我不知道for循环之后的索引值。据我所知,常量不能以这种方式修改或初始化。知道吗?啊,知道。如果您动态计算所需的索引,那么第二个示例(获取动态列表中的所有项目并在中建立索引)可能就是您需要做的事情。问题是,它必须是一个常量。我不知道for循环之后的索引值。据我所知,常量不能以这种方式修改或初始化。知道吗?啊,知道。如果您动态地计算所需的索引,那么第二个示例(获取动态列表中的所有项目并在中建立索引)可能就是您需要做的事情。