如何在硒动态表的所有页面中搜索包含特定文本的元素

时间:2018-08-08 14:16:03

标签: java selenium-webdriver

当前,我搜索文本并单击使用自定义xpath在动态表中具有搜索字符串的行中的按钮: //div/span[contains(text(),'search string')]/parent::div/parent::td/following-sibling::td/button[@class='btton-clicked-on-table']")
如果搜索字符串在第一页上,则可以使用。

现在,如果相同的字符串位于首页以外的其他页面上,则找不到异常。那么如何在动态表的多个页面中搜索相同的字符串?

2 个答案:

答案 0 :(得分:0)

鉴于您提供的示例URL,这是一些快速代码,可根据您的需要进行操作,以使其适合您正在使用的网站。

String url = "https://www.redmine.org/projects/redmine/issues";
driver.navigate().to(url);

String searchTerm = "Tracker";
By searchTermLocator = By.xpath("//td[@class='subject']/a[contains(.,'" + searchTerm + "')]");
List<WebElement> links = driver.findElements(searchTermLocator);
while (links.size() == 0)
{
    // click Next
    driver.findElement(By.linkText("Next »")).click();
    // look for matches
    links = driver.findElements(searchTermLocator);
}

// match found, click it
links.get(0).click();

我要查找的搜索词在第二页上找到。

答案 1 :(得分:0)

如评论中所述,每次移动到下一页/新页面时,您都必须查找元素,还要确保在搜索元素之前有适当的等待时间,请尝试以下

int pageCount=0; // count of pages
while(nextPageIsAvaialable)
{
    pageCount++;
    List<WebElement> checkBoxOf_searchText = driver.findElements(By.xpath("//div/span[contains(text(),'search string')]/parent::div/parent::td/following-sibling::td/button[@class='btton-clicked-on-table']")); // use findElements --> to avoid NoSuchElementException
    if (!checkBoxOf_searchText.isEmpty()) 
     {
        checkBoxOf_searchText.get(0).click();
        System.out.println("Found on page number : "+ pageCount);
    }
    else
    {
        System.out.println("Not found on page number : "+ pageCount);
    }
    driver.findElement(By.xpath(xpathExpressionOfNextPage).click(); 
}