如何检查名称为 class 的第二个元素,如果它存在于 Selenium Java 中则单击它

How to check for second element with class name and click it if it exists in Selenium Java

所以我正在使用 selenium 编写自动化测试,我在选择具有相同 class 名称的 div 列表中的第二个元素时遇到了很多问题

Boolean isExists2Accounts = driver.findElements(By.xpath("(//div[contains(@class, 'item-name')])[2]")).size() < 0;

                                if(isExists2Accounts)
                                {
                                    //Finds second div element that has classname of item-name and clicks on it
                                    driver.findElement(By.xpath("(//div[contains(@class, 'item-name')])[2]")).click();
                                }

                                else
                                {
                                    driver.get("javascript:alert('There isn't a second account or you don't know how to select it!');");
                                    Thread.sleep(5000);
                                    org.testng.Assert.fail("transferTest6() Failed due to There isn't a second account or you don't know how to select it!");
                                }

HTML 结构如下所示:

<div class="item-list">
    <div class="item-name">
        <div> clickable area </div>
        <div class="button-wrap"></div>
    </div>
    <div class="item-name">
        <div> clickable area </div>
        <div class="button-wrap"></div>
    </div>
    <div class="item-name">
        <div> clickable area</div>
        <div class="button-wrap"></div>
    </div>
    <div class="item-name">
        <div> clickable area </div>
        <div class="button-wrap"></div>
    </div>
</div>

不太确定我做错了什么,我查看了 html 并且有 5 个 div 具有指定的 class 名称。一般来说,selenium 很新,使用 eclipse/junit/webdriver。

我看到了几个与此类似的问题,并且尝试了人们发布的解决方案并没有奏效。我看到了一些使用 .get(2) 的建议,同时我会尝试实施它。

如果你能提供任何帮助,那将是很好的。

get(2) 是第三个元素,不是第二个,因为计数从 0 开始。

所以:

driver.findElements(By.cssSelector(".item-name")).get(1).click();

或取决于您可以点击的位置

driver.findElements(By.cssSelector(".item-name div:not(.button-wrap)")).get(1).click();

嘿,Stanjer 给出的所有答案都有效,我用不同的标记测试了它,构建系统的开发人员我正在通过随机鼠标按下事件(不是点击)测试 html 我是试图与之交互是导致问题的原因。

如果是点击事件,问题的最终解决方案是:

driver.findElements(By.cssSelector(".item-name")).get(1).click();

就像他说的那样

但是在这种情况下,我将 Javascript 发送到控制台以使用开发人员已经创建的函数。