我需要通过Xpath找到具有相同automationid的第二个元素

时间:2017-12-15 13:16:19

标签: c# wpf selenium testing xpath

我正在努力寻找Xpath。我的问题是,我测试的软件有一个特定的功能,我需要扫描两个组件(称为两步扫描),有两个文本框没有名称和相同的Automationid。所以我需要找到我试过的第二个,但它不起作用。

[FindsBy(How = How.Xpath, Using = "//*[@AutomationId='ScanTextBox'][1]")]
public IWebElement ScanTextBox1;

[FindsBy(How = How.Xpath, Using = "//*[@AutomationId='ScanTextBox'][2]")]
public IWebElement ScanTextBox2;

我正在使用winium并且我正在测试WPF应用程序。

2 个答案:

答案 0 :(得分:0)

你真的需要使用FindsBy吗?如果没有html,我们无法为FindsBy创建一个正确的XPath到这些按钮。这样,我只能为您提供另一种解决方案,并在提供html代码时更新我的​​awnser。

您可以使用复数形式的FindElement,它们都可以返回。之后,您可以按索引选择所需的按钮。能够做到这一点的示例方法:

public IWebElement GetScanTextBox(int index)
{
    return Driver
        .FindElements(By.XPath("//*[@AutomationId='ScanTextBox']"))
        .ElementAt(index);
}

public void UsageExample()
{
    var buttonOne = GetScanTextBox(0);
    var buttonTwo = GetScanTextBox(1);  
}

答案 1 :(得分:0)

按照此处所述更新定位器:

(//*[@AutomationId='ScanTextBox'])[1]
(//*[@AutomationId='ScanTextBox'])[2]

不同之处在于,在我的情况(locator)[n]中,您从定位器找到的所有元素中选择n-th元素。并且通过locator[n]搜索在父节点中具有n-th位置的元素