1

我正在处理将鼠标光标移动到 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 颗星没有被突出显示)?

目前我的脚本能够移动到任何星星并单击它。但我不明白如何验证星光高亮功能。

4

3 回答 3

0

我会编写计算星星以进行控制的方法:

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

所以您可以执行以下操作:

突出你的星星,并用上面写的方法断言它:

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

希望这可以帮助,

于 2018-06-19T20:07:03.360 回答
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']"));

那么简单的逻辑会是这样的:如果Listsize 为 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");
   }
}
于 2018-06-19T17:40:33.377 回答
0

根据鼠标悬停事件之前和之后的HTML ,区别在于子标签中存在class="hover" 。因此,要验证前面的星星是否突出显示,您可以为所需元素创建一个诱导WebDriverWait的列表,并验证该列表是否为非空,您可以使用以下解决方案:<a>

//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");
于 2018-06-20T05:36:36.613 回答