gpt4 book ai didi

java - 悬停元素列表 - Selenium Java WebDriver

转载 作者:行者123 更新时间:2023-12-01 06:02:59 26 4
gpt4 key购买 nike

下面是我尝试使用 Selenium WebDriver (2.53.1) 和 Java 测试的场景。

在网页上,我有一个星星列表。我想将鼠标悬停在每个星星上,当我们将鼠标悬停时,星星会突出显示。然后单击其中一颗星星。当每个星星悬停时,CSS 会发生变化。

悬停之前

  <div class="wh-rating-choices" style="display: none;">
<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>

悬停后

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

所以基本上,在成功悬停时,“hover”类会添加到 html/css 中。

我尝试过的代码如下。

List<WebElement> allStars = driver.findElements(By.xpath("//a[@class='hover']"));
System.out.println("<<<<<<<<<<<<------List of all stars, size------------>>>>>>>>>>"+allStars.size());
for (WebElement e : allStars) {
Actions act = new Actions(driver);
act.moveToElement(e).build().perform();
Thread.sleep(5000);
}

和之前的hover一样,没有添加'hover'类,WebElements列表始终为零。尝试了一些 Selenium 网站上建议的一些选项,但没有用。请帮忙,如何继续这一问题。

最佳答案

我刚刚测试了一个解决方案,但它非常粗糙。不过,它确实有效。

注意:直接导航到第五颗星(带有文本“5”的元素)对我来说不起作用。看来您需要将鼠标悬停在评级保持器框打开,然后将鼠标悬停到第五颗星,以便将所有这些星都显示为 class="hover"。

这就是我所做的:

-- 使用操作导航到上面的元素(“撰写评论”)

-- 以 1 像素为增量向下移动(正“y”)

-- 每次增量后,测试类为“wh- rating-choices”的元素是否包含字符串“block”

-- 如果是,则移动到类为“wh- rating-choices-holder”的元素下包含文本“5”的元素

我在 python 中测试了它,但下面是在 Java 中应该工作的内容:

Actions action = new Actions(driver);
int inc = 0;
while (inc < 100) {
WebElement top = driver.findElement(By.xpath("//*[contains(text(), 'Write a Review')]"));
action.moveToElement(top, 0, inc).contextClick().perform();
Thread.sleep(200);
a = driver.findElement(By.xpath("//*[contains(@class, 'wh-rating-choices')]"));
if (a.getAttribute("style").contains("block") {
aa = driver.findElement(By.xpath("//*[contains(@class, 'wh-rating-choices-holder')]"));
bb = aa.findElement(By.xpath(".//*[contains(text(), '5')]"));
action.moveToElement(bb).perform();
break;
}
inc++;
}
System.out.println(bb.getAttribute("outerHTML"));

Thread.sleep(200) 可能有点过大,请尝试更低的值,例如 50 或 20。

PS。您可能需要先关闭弹出窗口,即具有 class="af-icon-cross"

的弹出窗口

关于java - 悬停元素列表 - Selenium Java WebDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52906949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com