我在页面上有两个具有非常相似的xpath的按钮 -
我试图点击的按钮 -
/html/body/div[@id='wrapper']/div[@id='content']/div[@id='contentarea']/div[@id='votecontent']/div[@id='votetext']/div[@id='voteboxes']/div[@id='votenow'][2]/form/input[2]
和我试图忽略的另一个按钮 -
/html/body/div[@id='wrapper']/div[@id='content']/div[@id='contentarea']/div[@id='votecontent']/div[@id='votetext']/div[@id='voteboxes']/div[@id='votenow'][1]/form/input[2]
两者之间的唯一区别是
[@id='votenow'][1]
和
[@id='votenow'][2]
但是我无法弄清楚如何与具有投票权的人交互[2],无论我采用哪种方式,它似乎总是与第一个交互,因为这是它找到的第一个
这是使用firefox驱动程序的java,任何建议都会很棒:)
答案 0 :(得分:3)
只需找到它们并通过索引获得所需的一个:
title
答案 1 :(得分:1)
请与您的开发人员联系!将相同的ID分配给同一页面上的两个不同元素(在您的案例按钮中)是非常糟糕的练习!它使DEV和QA的生命不必要地变得比它需要的更难!
您发布的xpath表达式已包含这两个按钮之间的区别。所以你只需要找到第一个并单击它。
您可以使用xpath - 应该足以使用id="votenow"
搜索元素。如前所述,在这种情况下你可以非常精确,并且已经过滤了第二个按钮:
WebElement button02 = driver.findElement(By.xpath("//div[@id='votenow'][2]/form/input[2]"));
button02.click();
正如@alecxe已经指出的那样,你也可以先对几个元素进行更一般的搜索,然后再筛选出正确的元素。我个人会在这种情况下使用id:
List<WebElement> buttonWrappers = driver.findElements(By.id("votenow"));
// you want the button-input-element in the 2nd wrapper element, indexing starts at 0, so do this:
WebElement button02 = buttonWrappers.get(1).findElement(By.xpath("//input[2]"));
// since it seems there are several input elements below the desired div, you can use xpath again