[英]Selenium + Java = FindElements (list) and check if some of them contains a specific text
我的问题:
假设我有一个页面显示我购买的产品。 在此页面中,我需要验证添加的这些产品之一是否包含与我在上一步中获得并放入 var ( String firstProductName
) 中的名称相同的名称。
所以我注意到 cssLocator .name
是所有这些产品名称的定位器。 如果我只购买了一个产品,我会通过这个定位器找到它并使用getText()
来验证是否包含与我存储在 var firstProductName
中的名称相同的名称。
问题是:有时我只有一种产品,有时我有不止一种。
我需要:
.name
定位器查找所有元素。getText()
方法找到的文本是否包含我的字符串firstProductName
我怎么做?
就像是:
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
}
您可以将所有这些都包装在一个函数中,如下所示。
/**
* 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
则测试失败。
对于 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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.