Appium 找不到分成两行的文本

问题描述 投票:0回答:1

祝你有美好的一天。

我在 appium 中搜索文本时遇到问题,问题是我正在使用以下 xpath 搜索文本“发送礼物”

//*[@text = 'Send Gifts']

但是katalon找不到相关文本,注意文本显示为两行 在实际屏幕中

"Send
Gift"

但是当打开appium检查器时,我发现它在一行中,如附件中所示。 另一个注释是我尝试访问另一个只有一行文本的文本,并且 appium 成功找到文本。

Send Gift option

try to find item in appium

selenium-webdriver text mobile automation appium
1个回答
0
投票

在移动自动化测试中处理多行文本元素时,特别是使用 Appium 等工具时,重要的是要考虑自动化框架如何实际呈现和识别文本。您遇到的问题,其中“发送礼物”显示为“发送 礼物”(两行)显示在屏幕上,但在 Appium 检查器中显示为一行,这可能很棘手。

以下是一些帮助您解决此问题的方法和注意事项:

  1. 使用包含XPath函数 如果文本分为两行,则在 XPath 中使用精确匹配可能无法按预期工作。您可以在 XPath 中使用 contains() 函数来匹配部分文本。但是,这种方法可能会匹配您不感兴趣的其他元素。这是一种权衡,但在某些情况下可能很有用:

x路径

//*[contains(@text, 'Send') and contains(@text, 'Gifts')]
  1. 使用辅助功能 ID 或资源 ID 只要有可能,优先使用辅助功能 ID 或资源 ID,而不是文本匹配。这些 ID 比 UI 文本不太可能更改,并且不受文本显示方式(单行、多行等)的影响:

java

driver.findElementByAccessibilityId("id_of_the_element");
// or
driver.findElementById("resource_id_of_the_element");
  1. XPath 中的正则表达式 XPath 1.0(通常受支持)没有对正则表达式的本机支持,这使得匹配跨多行或具有可变部分的文本变得很棘手。某些框架或工具可能提供扩展或解决方法,但这些框架或工具并未得到普遍支持,并且可能无法与 Appium/Katalon 一起使用。

  2. 使用 UIAutomator2 策略(适用于 Android) 如果您正在测试 Android 应用程序,您可以改用 UIAutomator2,它具有更灵活的查询语法,并且可以更好地处理多行文本:

java

driver.findElement(MobileBy.AndroidUIAutomator("new 
UiSelector().textContains(\"Send\").textContains(\"Gifts\")"));
  1. 调整您的测试或应用程序(如果可能) 有时,最简单的路径是调整测试或应用程序(如果您有能力请求更改)。例如,确保用于关键元素的文本以有利于自动化的一致方式显示可以避免很多麻烦。

  2. 捕获全屏文本并分析 作为最后的手段或在非常复杂的场景中,您可以捕获整个屏幕的文本(使用 OCR 工具或所有可见文本的转储之类的工具),然后在测试脚本中搜索该文本。这更复杂并且可能更慢,但可以在其他方法失败时使用。

结束语 对具有动态或复杂布局的应用程序进行自动化 UI 测试可能具有挑战性。有时,需要结合多种策略或寻找创造性的解决方法。始终牢记使测试稳健和不过分复杂之间的平衡。

© www.soinside.com 2019 - 2024. All rights reserved.