我正在努力寻找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应用程序。
答案 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
位置的元素