苹果 |机器人框架 |无法使用自定义定位器策略 运行 关键字来查找元素
Appium | Robot Framework | Unable to run a keyword to find an element using a custom locator strategy
我正在使用 Robot Framework 和 Appium 来自动化 Android 本机应用程序。我们已将 运行 这些测试转移到 espresso 驱动程序,并且需要使用视图标签定位器来识别元素。但是,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
当我尝试调用关键字来查找定位器时,机器人框架认为我正在传递元素定位器。有人可以帮我吗?我需要编写任何其他功能来实现这一目标吗?
请帮忙!
*** Variables ***
table只能定义静态字符串,不能调用其他关键字。您将 ${signUpEmail}
定义为文字字符串 "Call Method Find by ViewTag"
(减去引号)。在您使用它的任何地方,完整的字符串将是传递给关键字的内容。
如果你想调用你的Find by ViewTag
关键字,你不需要使用Call Method
。这是一个普通的关键字,所以你可以用普通的方式调用它。例如:
${result}= Find By ViewTag a_view_tag
我通过扩展 Appium 库以支持 view-tag
策略解决了这个问题。
除了函数之外,我还需要更新 Appium 库构造函数中的 strategies
对象。
def __init__(self):
"""Initialize extended locators."""
ElementFinder.__init__(self)
strategies = {
'viewtag': self._by_viewtag,
}
self._strategies.update(strategies)
我正在使用 Robot Framework 和 Appium 来自动化 Android 本机应用程序。我们已将 运行 这些测试转移到 espresso 驱动程序,并且需要使用视图标签定位器来识别元素。但是,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
当我尝试调用关键字来查找定位器时,机器人框架认为我正在传递元素定位器。有人可以帮我吗?我需要编写任何其他功能来实现这一目标吗?
请帮忙!
*** Variables ***
table只能定义静态字符串,不能调用其他关键字。您将 ${signUpEmail}
定义为文字字符串 "Call Method Find by ViewTag"
(减去引号)。在您使用它的任何地方,完整的字符串将是传递给关键字的内容。
如果你想调用你的Find by ViewTag
关键字,你不需要使用Call Method
。这是一个普通的关键字,所以你可以用普通的方式调用它。例如:
${result}= Find By ViewTag a_view_tag
我通过扩展 Appium 库以支持 view-tag
策略解决了这个问题。
除了函数之外,我还需要更新 Appium 库构造函数中的 strategies
对象。
def __init__(self):
"""Initialize extended locators."""
ElementFinder.__init__(self)
strategies = {
'viewtag': self._by_viewtag,
}
self._strategies.update(strategies)