我有一个网页,用户正在为特定的web元素选择过滤器,并根据web元素显示交易数量,现在是这样的,交易总数不显示在单个页面中,有一个"加载更多活动按钮",用户需要单击该按钮,直到加载了所有页面,或者该按钮没有显示,以获得事务的总数因此,一旦加载了所有页面,我想计算交易并验证
好心帮忙。
//activitybutton.isdisplayed = "load more activity" button
//click activity button
//count total no of transaction
public void validateCategoryDisplayDetails() {
filterbutton.click();
airline.click();
donebutton.click();
while(activityButton.isDisplayed())
{
activityButton.click();
}
int countxpath = transactionday.size();
//return countxpath;
System.out.println(countxpath);
}
看起来transactionday
可能是这样声明的:
@FindBy(xpath="xpath/matching/all/transactions")
List<WebElement> transactionday;
调用PageFactory.initElements
时,会处理每个@FindBy
带注释的成员。即使是未注释的,如果它们属于WebElement
类型,也会尝试根据它们的name
属性进行定位。此时此刻,并不是所有的事务都加载到页面上,因此此列表最终只包含此时存在的事务。虽然列表中的WebElement
对象可能继续反映页面上对象的实际状态,但不会自动重新评估xpath以将更多元素放入列表中。
稍后,当您确保所有元素都加载到页面上时,您需要再次定位事务。假设您有一个名为driver
的WebDriver
参考
int countxpath = driver.findElements(By.xpath("xpath/matching/all/transactions")).size()
如果您使用像SerenityBDD这样的框架,您可能可以在不显式重新评估xpath的情况下逃脱惩罚,因为该框架使用代理在最晚可能的时刻而不是在初始化页面对象时延迟评估WebElement
类型的实例成员。
注意:如果单击按钮加载更多结果会导致部分或全部页面重新渲染,则可能需要在页面重新渲染后通过调用driver.findElement
再次获取该按钮。