所以我正在使用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)的建议,我会在同一时间尝试实现它。
你能给予的任何帮助都会很好。
答案 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发送到控制台以使用已经由开发人员创建的函数。