通过webdriver中的列循环列表

时间:2017-05-31 16:01:44

标签: java selenium selenium-webdriver html-lists

如果我希望页面显示5个优惠,我如何告诉webdriver列出ul中的所有5个优惠?

Ul html代码

<ul id="more-load" class="product_list_widget pagination-centered" style="padding-top:15px;">

我想你会用

List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='more-load']/ul/li")); 

for (WebElement element: allElements) {
      System.out.println(element.getText());
}

但我不确定如何在Ul中打印每个单独的优惠并匹配预期显示的5个优惠

已编辑的代码

从不介意使用它并且工作

WebElement allElements = driver.findElement(By.id("more-load"));

    List<WebElement> liElements = allElements.findElements(By.tagName("li"));


    for (int i = 0; i < liElements.size(); i++)
    {
        System.out.println("-------------------------------------------------------");
        System.out.println(liElements.get(i).getText());
    }

但是,如果我在左侧有一个列,其中ul =产品类别,我将如何循环它以浏览每个单独的链接文本并执行相同的功能

3 个答案:

答案 0 :(得分:0)

让我们说你的5个优惠如下:

Offer1
Offer2
Offer3
Offer4
Offer5

现在你的方法是正确的,直到循环:

然后你可以做类似的事情:

String offerString = Offer1 + " " + Offer2 + " " +  Offer3 + " " +  Offer4 + " " + Offer5;

for (WebElement element: allElements) {
      if(offerString.contains(element.getText()){

        System.out.println("Offer item is: " + element.getText());

      }
}

答案 1 :(得分:0)

坚持原来的尝试,除了改变线:

List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='more-load']/ul/li")); 

List<WebElement> allElements = driver.findElements(By.xpath("//ul[@id='more-load']/li")); 

答案 2 :(得分:0)

使用java8:

List<String> offers =  driver
            .findElements(By.cssSelector("#more-load li"))
            .stream()
            .map(WebElement::getText)
            .collect(Collectors.toList());

你可以断言 offers.size()以获得任何断言库的预期值

要在UL中获取链接的文本元素,您可以使用下一个选择器:

driver.findElements(By.cssSelector("ul a"))