Я хотел бы знать, как правильно (официально) использовать путь к элементу в Robot Framework. Согласно документу:
Допустим, я хочу использовать XPath. Если я понимаю, как правильно использовать его, например, в KW:
Wait Until Page Contains Element locator=xpath://*[@id = "post-message-container"]
Но во многих случаях, погуглив, я находил вот это:
Wait Until Page Contains Element xpath=//*[@id = "post-message-container"]
Удивительно, но оба работают, но я не думаю, что второй должен. Не могли бы вы помочь мне решить эту путаницу?
@Pramesh, можешь ли ты показать мне случай «стратегия = значение» в документации? Я не вижу этого, могу найти только «стратегию:ценность». Хочу спросить, почему вы ответили в комментарии, а не в "Ответить"? В этом случае невозможно «Принять» ваш ответ.
В официальной документации нет примеров strategy=value
, поскольку рекомендуемый синтаксис — strategy:value
. Однако, если вы посмотрите на другую похожую библиотеку под названием Библиотека браузера, вы обнаружите, что они использовали синтаксис strategy=value
. Я думаю, это просто зависит от библиотеки и ее рекомендаций.
Python позволяет передавать аргументы метода/функции вне порядка, когда вы упоминаете имя аргумента. Например:
def foo(x, y):
print(f"x: {x}")
print(f"y: {y}")
foo(1,2)
foo(y=1,x=2)
Скорее всего, это связано с тем, как реализованы kwargs в Python. Поскольку сам робот работает на Python, он соблюдает это соглашение.
Наиболее типичным местом использования этого соглашения является использование кваргов, но в данном конкретном случае локатор является обычным позиционным аргументом, поскольку это ключевое слово выглядит следующим образом:
@keyword
def wait_until_page_contains_element(
self,
locator: Union[WebElement, None, str],
timeout: Optional[timedelta] = None,
error: Optional[str] = None,
limit: Optional[int] = None,
):
В этом случае необязательными являются только таймаут, ошибка и лимит (например, они имеют значение по умолчанию, если значение не передано).
Таким образом, передача аргумента ключевому слову в формате, в котором упоминается имя его переменной, скорее всего, служит своего рода документацией. Определение того, что первым аргументом должен быть локатор, означает явное утверждение, а если он опущен, то это только неявно и полагается на тот факт, что вызывающая сторона знает порядок аргументов.
Я думаю, вы имеете в виду SeleniumLibrary. Согласно документации — Явная стратегия локатора указывается с помощью префикса с использованием
syntax strategy:value
илиstrategy=value
. Первый синтаксис предпочтительнее, поскольку второй идентичен синтаксису именованных аргументов Robot Framework, и это может вызвать проблемы. Итак, я думаю, лучше всего использовать методxpath://div
?