gpt4 book ai didi

selenium - WinAppDriver - 使用文本定位元素

转载 作者:行者123 更新时间:2023-12-02 03:56:02 40 4
gpt4 key购买 nike

我正在自动化一个简单的 Windows 窗体应用程序,并尝试使用其内部文本来定位 WindowsElement。我的 WindowsElement 如下所示:

ControlType = DataItem
Name = 'Identifier'
ValuePattern.Value = 'Text'
LegacyIAccessiblePattern.Value = 'Text'
AutomationId = blank

该元素除了 NameControlType(我在 XPath 中使用)和 ValuePattern.Value(其中包含)之外没有其他属性我正在搜索的所需文本。我想使用 ValuePattern.ValueLegacyIAccessiblePattern.Value 基于 'Text' 定位元素,但我似乎无法编写成功使用这些属性的 XPath。我无法使用 @Name 来定位该元素,因为其他几个元素共享相同的 @Name 属性值。 Text 是唯一的唯一属性。

在 Selenium WebDriver 中,我可以通过文本定位元素,如下所示:

driver.FindElement(By.XPath("//*[text()='Text']"));

在 Appium 中,我可以使用这个:

driver.FindElement(By.XPath("//*[@text='Text']")

在 WinAppDriver 中,我正在尝试:

driver.FindElementByXPath("//DataItem[text()='Text']");

我也尝试过:

driver.FindElementByXPath("//DataItem[@ValuePattern.Value='Text']");

这两个都会抛出NoSuchElementException。但是,我能够在 TextToBePresentInElement 上成功调用 WebDriverWait 并且这正在工作:

// my locator
private WindowsElement IdentifierSearchResult => Driver.FindElementByXPath("//DataItem[@Name='Identifier']");

// webdriverwait using the above locator, wait for 'Text' to be present in this element.
new WebDriverWait(Driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.TextToBePresentInElement(IdentifierSearchResult, 'Text'));

这也打印了正确的文本:

var elements = Driver.FindElementsByXPath("//DataItem[@Name='Identifier']");
var text = elements.First().Text;

但是,这只是一个调试场景,我正在检索列表并打印第一个列表的文本 - 这只是一个测试,以验证该元素是否具有有效的 .Text属性。我无法将此定位器用于我的最终代码,因为不能保证它选择正确的元素。

我查看了 WinAppDriver 存储库示例,但找不到任何实际使用文本的内容 - 每个人都使用 @Name@AutomationId - 我的元素名称不唯一,并且没有自动化 ID,因此这对我不起作用。

我知道我可以使用 LINQ 来解决这个问题:

var elements = driver.FindElementsByXPath("//DataItem[@Name='Identifier']");
var elementToClick = elements.FirstOrDefault(e => e.Text == 'Text');

但这感觉像是一个棘手的解决方法,如果可能的话我想避免它。

如何使用文本定位元素?像 //DataItem[@Text='Text'] (我也尝试过,顺便说一句)是更好的选择,我可以将我的 'Text' 传递为一个参数。

最佳答案

我在使用菜单项时遇到了同样的问题。首先,我使用 ForEach 循环来检查文本值。后来我将其重构为 LINQ 表达式。但我相信这个问题没有办法解决,您必须使用循环或 LINQ 来完成。更新:在 Windows 自动化脚本中使用 XPath 会减慢测试速度。 WAD 中的 XPath 处理非常慢。

关于selenium - WinAppDriver - 使用文本定位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414761/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com