我正在将鼠标光标移至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>
当我将鼠标悬停在第三颗星上时,突出显示前两颗星和当前第三颗星,而未突出显示最后两颗星,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个星星)?
当前,我的脚本能够移至任意星星并单击它。但是我不理解如何验证星标功能。
答案 0 :(得分:0)
您可以这样做:
// 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");
}
}
答案 1 :(得分:0)
我将编写一种方法来计算星星以进行控制:
public int countStars(){
return driver.findElements(By.xpath("//a[@class='hover']"));
}
因此您可以执行以下操作:
突出显示您的星星,并使用上述书面方法对其进行断言:
int expectedCnt = 3;
Assert.assertEquals(countStars(), expectedCnt, "Count should be equal!")
希望这会有所帮助,
答案 2 :(得分:0)
根据鼠标悬停事件之前和之后的 HTML ,区别在于子对象中存在 class =“ hover” <a>
个标签。因此,要验证以前的星星是否突出显示,您可以创建一个 List 来诱导 WebDriverWait 并包含所需元素,并验证 List < / em> 非空,您可以使用以下解决方案:
//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");