我正在使用检查工具和 WinAppDriver,但在应用程序内的其他元素中找不到元素。所有元素之间的唯一区别是屏幕上的坐标(这是每个按钮之间唯一的区别)。例如,我可以通过 X 位置中存在的名称 (FindElementByName) 找到元素吗?或其他想法?
肿瘤坏死因子
我正在使用检查工具和 WinAppDriver,但在应用程序内的其他元素中找不到元素。所有元素之间的唯一区别是屏幕上的坐标(这是每个按钮之间唯一的区别)。例如,我可以通过 X 位置中存在的名称 (FindElementByName) 找到元素吗?或其他想法?
肿瘤坏死因子
如果按钮总是在同一个索引,你可以遍历它们并按索引查找。或者比循环更好,使用 FindElementsBy (注意 Elements 是复数)。
我对几个具有相同名称/accessibilityID 的盒子执行此操作:
public WindowsElement doStuff(WindowsDriver<WindowsElement> appSession, int index)
{
Elements = appSession.FindElementsByAccessibilityId("SpinnerTextBoxContent");
return Elements[index];
}
然后一个简单的调用
doStuff(appSession, 0);
得到我需要的东西。
您可以查看driver.PageSource
元素是否可能具有一些其他属性来区分它们,这些属性可能通过 Inspect 不可见。如果是这样,您可以使用它driver.FindElementByXPath
来查找正确的元素,例如
driver.FindElementByXPath("//button[@attributeOne='valueOne'][@attributeTwo='valueTwo']")
否则,正如您提到的,您知道位置存在差异,您还可以使用 xPath 来查询例如最左边的按钮:
driver.FindElementByXPath("//button[@x=min(//button[@name='theName']/@x)]")