硒非常相似的xpaths?

时间:2015-10-03 01:17:20

标签: java selenium xpath selenium-webdriver

我在页面上有两个具有非常相似的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,任何建议都会很棒:)

2 个答案:

答案 0 :(得分:3)

只需找到它们并通过索引获得所需的一个:

title

答案 1 :(得分:1)

第一

请与您的开发人员联系!将相同的ID分配给同一页面上的两个不同元素(在您的案例按钮中)是非常糟糕的练习!它使DEV和QA的生命不必要地变得比它需要的更难!

第二

您发布的xpath表达式已包含这两个按钮之间的区别。所以你只需要找到第一个并单击它。

通过xpath:

您可以使用xpath - 应该足以使用id="votenow"搜索元素。如前所述,在这种情况下你可以非常精确,并且已经过滤了第二个按钮:

WebElement button02 = driver.findElement(By.xpath("//div[@id='votenow'][2]/form/input[2]"));
button02.click();

通过id:

正如@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
相关问题