苹果 |机器人框架 |无法使用自定义定位器策略运行关键字来查找元素

Posted

技术标签:

【中文标题】苹果 |机器人框架 |无法使用自定义定位器策略运行关键字来查找元素【英文标题】:Appium | Robot Framework | Unable to run a keyword to find an element using a custom locator strategy 【发布时间】:2020-04-24 09:39:15 【问题描述】:

我正在使用 Robot Framework 和 Appium 来自动化 android 原生应用。我们已经转移到 espresso 驱动程序来运行这些测试,并且需要使用 view-tag 定位器来识别元素。但是,Appium Robot 库不支持这种定位器策略。 我在下面写了自定义关键字

from robot.libraries.BuiltIn import BuiltIn
from robot.api.deco import keyword


@keyword(name='Find by ViewTag')
def by_viewtag(tagname):
    """Provides support to find elements using view tag for Espresso driver on Android"""
    appiumlib = BuiltIn().get_library_instance('AppiumLibrary')
    driver = appiumlib._current_application()
    el = driver.find_element_by_android_viewtag(tagname)
    print(el)
    return el

我在我的页面文件中使用它来查找这样的对象:

*** Settings ***
Library  ../../../../Resources/Utils/find_elements_utils.py
Library  BuiltIn
Library  AppiumLibrary
Resource  ../../../../Resources/Utils/helpers.robot

*** Variables ***
$loginBtn =               id=btn_sign_in
$signUpEmail=  Call Method  Find by ViewTag

但是,运行它会引发以下错误

Element locator 'Call Method Find by ViewTag' did not match any elements after 20 seconds

当我尝试调用关键字来查找定位器时,机器人框架认为我正在传递元素定位器。有人可以帮我吗?我需要编写任何其他功能来实现这一点吗?

请帮忙!

【问题讨论】:

【参考方案1】:

*** Variables *** 表只能定义静态字符串,不能调用其他关键字。您将 $signUpEmail 定义为文字字符串 "Call Method Find by ViewTag"(减去引号)。无论您在何处使用它,该完整字符串都将是传递给关键字的内容。

如果你想调用你的Find by ViewTag关键字,你不需要使用Call Method。这是一个普通的关键字,所以你可以用普通的方式调用它。例如:

$result=  Find By ViewTag  a_view_tag

【讨论】:

【参考方案2】:

我通过扩展 Appium 库以支持 view-tag 策略解决了这个问题。 除了函数,我还需要更新 Appium 库的构造函数中的 strategies 对象。

 def __init__(self):
        """Initialize extended locators."""
        ElementFinder.__init__(self)
        strategies = 
            'viewtag': self._by_viewtag,
        
        self._strategies.update(strategies)

【讨论】:

以上是关于苹果 |机器人框架 |无法使用自定义定位器策略运行关键字来查找元素的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义百度地图的定位图标 ios

AD B2C 自定义策略自定义声明出现错误“无法验证提供的信息”。注册时

Delphi 自定义组件,拖动时无法在设计器中定位(顶部/左侧属性的自定义设置器)

ios开发 如何修改正确tabBar的高度?

机器人框架 > 元素定位器没有匹配任何元素

在派生自熊猫数据框的图中自定义图例