Selenium + Java = FindElements(列表)并检查其中一些是否包含特定文本

时间:2015-11-04 18:44:04

标签: java selenium

我的问题:

假设我有一个包含我购买的产品的页面。在这个页面中,我需要验证这些产品中的一个是否包含我在上一步中获得的相同名称并放入var(while (turn != 0))。

所以我注意到cssLocator String firstProductName是所有这些产品名称的定位器。如果我只购买了一个产品,我只能通过此定位器找到它并使用.name来验证我是否包含与var getText()中存储的名称相同的名称。

问题是:有时我只有一种产品,有时我只有一种产品。

我需要:

  1. 访问此页面,找到firstProductName定位器的所有元素。
  2. 然后我需要逐个查看是否通过.name方法找到的文字包含我的字符串getText()
  3. 如果至少有一个名称等于此String,我的测试就可以了。如果没有,则测试失败。
  4. 我该怎么做?

3 个答案:

答案 0 :(得分:1)

类似的东西:

List<WebElement> allProducts = select.findElements(By.cssSelector("{not quite clear what your selector is, but it includes "name"}"));
for (WebElement product: allProducts) {
    if(product.getText().equals(firstProductName)) 
        return; // or break or whatever
}

答案 1 :(得分:0)

你可以将这一切包装在一个函数中,如下所示。

/**
 * Determines if the supplied product name is found on the page
 * 
 * @param productName
 *            the product name to be searched for
 * @return true if the product name is found, false otherwise
 */
public boolean foundProduct(String productName)
{
    List<WebElement> products = driver.findElements(By.className("name"));
    for (WebElement product : products)
    {
        if (product.getText().trim().equals(productName))
            return true;
    }

    return false;
}

然后在您的测试代码中,您将执行类似

的操作
assertTrue(foundProduct("some product name"));

但我不知道您是否正在使用TestNG等。基本上,如果返回true则测试通过;如果返回false则失败。

答案 2 :(得分:0)

对于Java 8及更高版本,请尝试此解决方案

public boolean productsContainsProvidedProduct(String product) {

 List<WebElement> products = driver.findElements(By.xpath("your_xpath_to_list_of_elements"));  
 wait.until(ExpectedConditions.visibilityOfAllElements(products));
 return products.stream().anyMatch(e -> e.getText().trim().contains(product));
}