当尝试使我们的应用程序自动化时,有两个名称相同的按钮。
我无法找到识别这些问题的方法。请让我知道在Java的Selenium Webdriver中标识这些元素的任何方法是什么
答案 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屏幕截图:
您也可以使用xpath达到相同的目的。
(//button[@class='same_class'])[2]
XPath屏幕截图:
根据需要更改括号中的索引(索引以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]
函数的好处是浏览器不再寻找进一步的匹配项,因此与其查找所有按钮并将其过滤为所需按钮,不如查找具有给定位置的按钮,并停止减少执行时间和资源要求。