Аппиум | Robot Framework | Невозможно запустить ключевое слово, чтобы найти элемент с помощью пользовательской стратегии локатора. - PullRequest
1 голос
/ 07 января 2020

Я использую Robot Framework и Appium для автоматизации собственного приложения Android. Мы перешли на драйвер эспрессо для запуска этих тестов, и элементы должны быть идентифицированы с помощью локатора 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

Каркас робота считает, что я передаю локатор элементов, когда пытаюсь вызвать ключевое слово, чтобы найти локатор. Может кто-нибудь помочь мне с этим? Есть ли дополнительные функции, которые мне нужно написать, чтобы это произошло?

Пожалуйста, помогите!

Ответы [ 2 ]

3 голосов
/ 07 января 2020

Таблица *** Variables *** может определять только строки stati c, она не может вызывать другие ключевые слова. Вы определяете ${signUpEmail} как буквальную строку "Call Method Find by ViewTag" (минус кавычки). Везде, где вы его используете, эта полная строка будет тем, что передается ключевому слову.

Если вы хотите вызвать ключевое слово Find by ViewTag, вам не нужно использовать Call Method. Это обычное ключевое слово, поэтому вы можете называть его обычным способом. Например:

${result}=  Find By ViewTag  a_view_tag
0 голосов
/ 14 января 2020

Я решил эту проблему, расширив библиотеку Appium для поддержки стратегии view-tag. Наряду с функцией мне также нужно было обновить объект strategies в конструкторе библиотеки Appium.

 def __init__(self):
        """Initialize extended locators."""
        ElementFinder.__init__(self)
        strategies = {
            'viewtag': self._by_viewtag,
        }
        self._strategies.update(strategies)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...