Как проверить, что звездные рейтинги подсвечиваются при наведении курсора мыши на Selenium

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

HTML-код:

<div class="wh-rating-choices">
    <div class="wh-rating-choices-holder">
        <a href="#">1</a>
        <a href="#">2</a>
        <a href="#">3</a>
        <a href="#">4</a>
        <a href="#">5</a>
        <em>Your Rating: <span></span></em>
    </div>
</div>

При наведении курсора на 3-ю звезду предыдущие 2 звезды и текущая 3-я звезда выделяются, а последние 2 звезды не выделяются, и изменение в HTML таково:

<div class="wh-rating-choices">
    <div class="wh-rating-choices-holder">
        <a class="hover" href="#">1</a>
        <a class="hover" href="#">2</a>
        <a class="hover" href="#">3</a>
        <a class="" href="#">4</a>
        <a class="" href="#">5</a>
        <em>Your Rating: <span></span></em>
    </div>
</div>

Обратите внимание на добавление класса.

Можно ли как-то проверить это изменение HTML (чтобы убедиться, что только первые 3 звезды выделены, а последние 2 звезды не выделены)?

В настоящее время мой сценарий может перейти к любой звезде и щелкнуть по ней. Но я не понимаю, как проверить функцию выделения звездочки.

3 ответа

Вы можете сделать это следующим образом:

// wait 2 seconds until `hover` classes will load
Thread.sleep(2000)

// find all elements with hover class
List<WebElement> elements = driver.findElements(By.xpath("//a[@class='hover']"));

Тогда простая логика будет такой: если List размер 3, значит все ок. Если вы хотите убедиться, что выделено ровно 1-3 звезды, вы можете пройтись по списку и получить текст элементов.

int starsExpected = 3;
if (elements.size() != starsExpected){
    throw new Exception("There is an error with stars highlight occurred");
}

for (WebElement e : elements){
   String text = e.getText(); // get current element text, like `1`, `2`... `5`
   if(Integer.parseInt(text) > starsExpected){ 
      throw new Exception("There is an error with stars highlight occurred");
   }
}

Согласно HTML до и после события Mouse Hover, различие заключается в наличии class="hover" внутри дочернего элемента. <a> теги. Таким образом, чтобы убедиться, что предыдущие звезды выделены, вы можете создать список, вызывающий WebDriverWait для нужных элементов, и проверить, не является ли список непустым, и вы можете использовать следующее решение:

//Perform Mouse Hover
if ((new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='wh-rating-choices-holder']//a[@class='hover']")))).size() != 0)
    System.out.println("Previous Stars are highlighted");
else
    System.out.println("Previous Stars are not highlighted");

Я написал бы метод, который считает звезды для контроля:

public int countStars(){
    return driver.findElements(By.xpath("//a[@class='hover']"));
}

так что вы можете сделать следующее:

выделите ваши звезды и подтвердите это с помощью вышеописанного метода:

int expectedCnt = 3;
Assert.assertEquals(countStars(), expectedCnt, "Count should be equal!")

Надеюсь это поможет,

Другие вопросы по тегам