如何在java selenium中使用循环从项目网格中找到相同的元素?

时间:2015-05-25 22:49:52

标签: java loops selenium elements

我试图找到按钮添加到购物车是否存在使用来自以下代码的所有项目框中的循环

<div class="page-body">
<div class="product-selectors">
<div class="product-filters-wrapper">
<div class="product-grid">
<div class="item-box">
<div class="item-box">
<div class="item-box">
<div class="item-box">
</div>

在每个项目框中的代码

<div class="item-box">
<div class="product-item" data-productid="20">
<div class="picture">
<div class="details">
   <h2 class="product-title">
   <div class="product-rating-box" title="1 review(s)">
      <div class="description"> 12x optical zoom; SuperRange Optical Image Stabilizer </div>
      <div class="add-info">
         <div class="prices">
            <div class="buttons">
               <input class="button-2 product-box-add-to-cart-button" type="button" onclick="AjaxCart.addproducttocart_catalog('/addproducttocart/catalog/20/1/1 ');return false;" value="Add to cart">
            </div>
         </div>
      </div>
   </div>
</div>

我需要发现所有itembox都有添加到购物车按钮存在或不使用循环。如果有人可以帮忙请

2 个答案:

答案 0 :(得分:0)

如果没有必要,我建议避免循环。除非明确需要这样做,否则您不需要循环查找。您可以找到添加到购物车按钮的计数并与已知值进行比较

By byCss = By.cssSelector(".item-box>div input[value='Add to cart']");
int cartCount = driver.findElements(byCss).size();

if (cartCount != 4){
    //fail the test
}

如果你只是一个循环并检查输入按钮是否存在。

By itemBoxes = By.className("item-box");
By button = By.cssSelector("[type='button'][value='Add to cart']");

List<WebElement> webElementList = driver.findElements(itemBoxes);
for (WebElement element: webElementList){
    //simply taking size if exist it will return 1
    if (element.findElements(button).size() != 1){
        //fail
    }
}

答案 1 :(得分:0)

你可以在循环中使用xpath搜索。

这样的东西
".//input[@value='Add to cart'][1]"
".//input[@value='Add to cart'][2]"
".//input[@value='Add to cart'][3]"
etc

不确定这个xpath是否正确,但通常它会对你有用,兄弟。 或类似的东西:

string xpath=".//input[@value='Add to cart']";

var AddToCartBtnsList = driver.findElements(By.Xpath(xpath));

foreach(IWebElement button in AddToCartBtnsList )
{
    button.click();
}