我的问题:
假设我有一个包含我购买的产品的页面。在这个页面中,我需要验证这些产品中的一个是否包含我在上一步中获得的相同名称并放入var(while (turn != 0)
)。
所以我注意到cssLocator String firstProductName
是所有这些产品名称的定位器。如果我只购买了一个产品,我只能通过此定位器找到它并使用.name
来验证我是否包含与var getText()
中存储的名称相同的名称。
问题是:有时我只有一种产品,有时我只有一种产品。
我需要:
firstProductName
定位器的所有元素。.name
方法找到的文字包含我的字符串getText()
我该怎么做?
答案 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));
}