XPath возвращает неправильный элемент - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с тем, что XPath возвращает неправильный элемент в коде, но работает так, как задумано, когда я помещаю его в свой браузер и ищу элемент с таким xpath.

Путь, который выполняет код, возвращает div следующего xpath.

Например, xpath:

//div [@class="product justify-content-md-center"][1]/h2

возвращает 2-й элемент вместо 1-го, как и должно быть, но когда я вставляю его в браузер, он получает правильный элемент, поэтому я думаю, что это не проблема xpath. Я использую автоматизацию огурца безмятежности с Java.

Я пытаюсь получить элементы с моего сайта проекта, в котором есть каталог с 12 продуктами. Вот HTML-код с php-кодом, в котором перечислены 12 продуктов:

$num = $stmt->rowCount();
if ($num > 0) {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
         extract($row);
         echo "<div class='product justify-content-md-center'>";
         echo "<img class='beerPicture' src='beers/{$picture}' style='height: 130px; width:130px'>";
         echo "<div class='click-callback'></div>";
         echo "<h2 class='header my-3 text-truncate'>{$name}</h2>";
         echo "<p class='description' style='display: none;'>{$description}</p>";
         echo "<p class='price'>{$price} lv.</p>";

         if ($quantity == 0) {
             echo "<h2 class='text_shadow'>Out of Stock</h2>";
         } else {
             $cartId = $row["id"];
             echo "<a class='btn' href='cartAction.php?action=addToCart&id=$cartId'>Add to cart</a>";
         }
             echo "<div class='quickview'>Description</div>";
             echo "</div>";
         }
    }
}

Мой метод получения xpath каждого отдельного div:

public String getProductName(int product) {
     String productName = getProduct().getWrappedElement().toString();
     String toRemove = productName.substring(0, 78);
     String result   = productName.replace(toRemove, "").replace("]/h2[text()]", "");

     String targetProductName = 
         result + "[" + product + "]" 
       + "/h2[@class=\"header my-3 text-truncate\" and text()]";

     System.out.println(targetProductName);
     System.out.println(getDriver().findElement(By.xpath(targetProductName)).getAttribute("textContent"));

     return getDriver().findElement(By.xpath(targetProductName)).getAttribute("textContent");
  }

И сценарий моего корнишона:

Scenario Outline: I should be able to view description of any product
    Given I am logged in and on catalog page
    When I click on <any> product description button
    Then I should be shown the <any> product description
    Examples:
      |any|
      |1  |
      |2  |
      |3  |
      |4  |
      |5  |
      |6  |
      |7  |
      |8  |
      |9  |
      |10 |
      |11 |
      |12 |
...