Как проверить, что звездные рейтинги подсвечиваются при наведении курсора мыши на 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!")
Надеюсь это поможет,