如何检查具有类名的第二个元素,如果它存在于Selenium Java中则单击它

时间:2015-04-20 18:11:37

标签: java selenium junit selenium-webdriver

所以我正在使用selenium编写自动化测试,我在选择具有相同类名的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。对于selenium来说非常新,使用eclipse / junit / webdriver。

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

你能给予的任何帮助都会很好。

2 个答案:

答案 0 :(得分:2)

get(2)是THIRD元素,而不是秒,因为计数从0开始。

所以:

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

OR取决于您可点击的位置

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

答案 1 :(得分:0)

嘿Stanjer给出的所有答案,我用不同的标记测试了它,构建系统的开发人员我通过随机mousedown事件(而非点击)测试我试图与之交互的html造成这个问题。

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

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

就像他说的那样。

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