如何通过Selenium验证鼠标悬停时星级是否突出显示

时间:2018-06-19 17:34:44

标签: java selenium selenium-webdriver xpath webdriverwait

我正在将鼠标光标移至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个星星)?

当前,我的脚本能够移至任意星星并单击它。但是我不理解如何验证星标功能。

3 个答案:

答案 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");