如何访问具有相同类名的第二个元素

时间:2019-07-17 23:58:55

标签: java selenium

当尝试使我们的应用程序自动化时,有两个名称相同的按钮。

我无法找到识别这些问题的方法。请让我知道在Java的Selenium Webdriver中标识这些元素的任何方法是什么

3 个答案:

答案 0 :(得分:2)

使用xpath或css(首选)找到所需的按钮,如下所示。

让我们考虑以下示例html。

<html><head></head><body>
		<button class="same_class">follow</button>
		<button class="same_class">follow</button>
</body></html>

现在您可以将css与 nth-of-type 一起使用,如下所示

button.same_class:nth-of-type(2) 

CSS屏幕截图:

enter image description here

您也可以使用xpath达到相同的目的。

(//button[@class='same_class'])[2]

XPath屏幕截图:

enter image description here

根据需要更改括号中的索引(索引以1开头而不是0)

答案 1 :(得分:1)

在为元素构造XPath时可以使用数组。 UI上是否有两个按钮元素具有相同的类名。例如 .//*[@class='XYZ']

因此,如果上面的XPath标识了两个元素,则可以首先使用(.//*[@class='XYZ'])[1]定位,然后使用(.//*[@class='XYZ'])[2]定位

让我知道这是否可以解决您的查询。

答案 2 :(得分:0)

假设您在DOM中定义了2个<button>标签,

switch (getType[i])
{
    case "A":
        IEnumerable<float> fetchedYearAbsences = oracleConn
            .SelectAbsenceType(EmployeeID)
            .Where(k => k.Type == "A")
            .GroupBy(g => g.Type)
            .Select(h => h.Sum(s => s.TotalHour));

        // add to the list:
        foreach (float fetchedYearAbsence in fetchedYearAbsences)
        {
             result.Add(new SigningAbsenceType
            {
                YearAbsence = fetchedYearAbsence,
                SickAbsence = 0.0f;
            });
        }
        break;

您可以使用XPath position()函数来匹配所需的任何按钮

  • 第一个按钮:<button name="foo">foo</button> <button name="foo">foo</button>
  • 第二个按钮://button[@name='foo' and position() = 1]

使用//button[@name='foo' and position() = 2]函数的好处是浏览器不再寻找进一步的匹配项,因此与其查找所有按钮并将其过滤为所需按钮,不如查找具有给定位置的按钮,并停止减少执行时间和资源要求。

更多信息:XPath Operators & Functions