在我正在测试的Web应用程序中,我有一个页面上显示的元素列表。根据列表中元素的数量,列表将变为分页。
分页是这样的:
我目前正在使用以下方法来确保始终到达列表的最后一页。我需要这个然后断言我创建的元素是显示的,因为元素总是在最后一页上。 它运行得很好但我的问题是,当我的测试达到这一点时,运行此语句需要大约20秒,因为我在所有测试中使用它会大大减慢我的测试过程。 对于我描述的案例,是否有更快捷的方法?
public void jumpToLastPage(){
List<WebElement> lastPage = driver.findElements(locator for last page button));
if (lastPage.size() == 0){
List<WebElement> nextPage = driver.findElements(locator for next page button));
if(nextPage.size() >= 1){
nextPage.get(0).click();
}
}
else lastPage.get(0).click();
}
答案 0 :(得分:0)
经过多次尝试,我发现问题实际上来自我在@BeforeMethod(TestNG)中的设置。
我的超时设置为10秒: driver.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS);
当它试图找到该元素并失败时,它仍然徘徊10秒钟以期找到它,这就是为什么我花了20秒钟才完成声明。我在一个页面上,没有显示任何元素。
我刚刚添加了两行代码来解决这个问题:
public void jumpToLastPage(){
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
List<WebElement> lastPage = driver.findElements(By.xpath(locator));
if (lastPage.size() == 0){
List<WebElement> nextPage = driver.findElements(By.xpath(locator));
if(nextPage.size() >= 1){
nextPage.get(0).click();
}
}
else lastPage.get(0).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
这样,它设置了在执行语句时等待3秒的隐式时间,然后一旦完成则返回默认的10秒,大大减少了完成语句所需的时间。
尽管如此,谢谢大家的答案。
答案 1 :(得分:-1)
我认为这会更快:
public void jumpToLastPage(){
List<WebElement> lastPageButton = driver.findElements(By locator);
List<WebElement> nextPageButton = driver.findElements(By locator);
// if last page button is on the page, click it
if(lastPageButton.size() != 0) {
lastPageButton.get(0).click();
}
// else if next page button, click it
else if(nextPageButton.size() != 0) {
nextPageButton.get(0).click();
}
// otherwise you should be on the only page
}