Python 使用contains在appium(iOS)中查找屏幕元素

Python 使用contains在appium(iOS)中查找屏幕元素,python,ios,automated-tests,appium,qa,Python,Ios,Automated Tests,Appium,Qa,您好,我正在做QA,最近开始使用appium和cucumber来自动化一些测试,对此我还是新手 我成功地实现了我想要的自动化,使用了一些像这样的函数 def function(element_name) find_element(:xpath, '//XCUIElementTypeOther[@name="' + element_name + '"]' ).click end 这可以满足我的需要,但现在我尝试使用con

您好,我正在做QA,最近开始使用appium和cucumber来自动化一些测试,对此我还是新手

我成功地实现了我想要的自动化,使用了一些像这样的函数

def function(element_name)
    find_element(:xpath,
                 '//XCUIElementTypeOther[@name="' + element_name + '"]'
                ).click
end
这可以满足我的需要,但现在我尝试使用
contains
重做相同的函数。像这样的

def function(element_name)
  find_element(:xpath,
               '//*[contains(text(), element_name)]'
              ).click
end
我得到的是

无法使用给定的搜索参数在页面上找到元素


我想我只是没有正确使用
contains
,但我真的不确定。

Xpath不是在Appium/xguitest中搜索元素的好方法,因为它通常太慢,并且可能无法按预期工作(您的contains案例)

相反,您应该尝试XUITest本机定位器策略:ionspredicateiossclasschain,例如

driver.find_element_by_ios_predicate("label contains 'Some text'")

您可以在此处查看更多示例:,

您使用contains的方式是正确的,唯一的问题是找不到元素。 如果XPATH不起作用,为什么不试试下面的相对路径呢

def function(element_name)
  //tbody//td[contains(text(),element_name)]

谢谢,我记得在其他地方读到,使用Xpath定位元素是个坏主意,但我很难找到更好的策略。现在我设法开始使用谓词,但我仍在试图弄清楚如何使
包含
起作用。你知道有什么好的资源可以用来探索使用的策略吗?我已经提供了一个在谓词表达式中使用contains文本的例子(请参阅我的答案:。我建议使用Appium desktop,因为您可以在检查应用程序时检查谓词/链策略。但更有用的是检查我提到的代码示例,因为Appium可能无法处理您将提供的每个表达式。)