#selenium #testing #robotframework
#selenium #тестирование #robotframework
Вопрос:
Атрибут переменной не передается в другой файл.
У меня есть мои переменные для локаторов элементов, хранящиеся в одном файле, и у меня есть утверждения, выполненные в другом файле, который до сих пор работал нормально и хорошо разделяет вещи. Я выполняю утверждение, чтобы проверить, что элемент существует, а его атрибут (значение) не является пустым. Если я напишу это на одной странице следующим образом, это будет работать отлично. При этом используются ключевые слова библиотеки selenium should not be equal
и Get Element Attribute
просто для заметки.
${EXAMPLE} get element attribute class=test test-data
should not be equal ${EXAMPLE} ${EMPTY}
Но если я разделю их на разные файлы. Итак, файл locators.robot:
#Locater File
${EXAMPLE} get element attribute class=test[test-data]
И утверждения.robot:
#Assertion File
should not be equal ${EXAMPLE} ${EMPTY}
Он перестает работать. Если я использую утверждение библиотеки selenium, подобное page should contain element
, тогда это работает, поэтому я знаю, что правильно подключаю другой ресурс. У меня такое чувство, что мне может понадобиться как-то сохранить атрибут в другой переменной и фактически заявить против этого. Любые идеи были бы замечательными. Заранее спасибо.
Комментарии:
1. В SeleniumLibrary нет такого ключевого слова, которое
get data attribute
вы имеете в видуGet Element Attribute
ключевое слово? robotframework.org/SeleniumLibrary/… Какую версию SeleniumLibrary вы используете? Также, пожалуйста, поделитесь дополнительными файлами locator.robot и Asertions.robot, трудно выяснить, что это${EXAMPLE} get data attribute class=test[test-data]
в вашем файле locator.robot. Это часть ключевого слова или это переменная?2. @BenceKaulics Извините, я ввел ошибку, вы правы, это атрибут Get Element. $ {EXAMPLE} — это имя переменной для локатора, который я хочу найти. Я хочу утверждать, что он существует, а также что его значение не является пустым. Следовательно
should not be equal ${EXAMPLE} ${EMPTY}
. т. е. значение элементов должно содержать что-то и не быть пустым.3. Пожалуйста, отредактируйте свой вопрос и исправьте его, а также, пожалуйста, добавьте всю таблицу переменных из locators.robot, а также все ключевое слово или код тестового примера из Asertions.robot. У меня есть предположения, что может быть не так, но не наверняка, пока мы не увидим больше вашего кода.
Ответ №1:
Предположим, у вас есть HTML-код, подобный этому, как вы указали в другом вопросе —
<div id="top-list">
<div data-version="12345" data-list="1" data-point="10">
Способ 1 — Менее рекомендуется —
Вот как выглядит мой assertion.robot
—
*Settings
Library SeleniumLibrary
Resource Locator.robot
*Test Cases
Test attributes Locator
Open Browser file:///C:Desktop/testxpath.html chrome
${attribute_value}= Get Element attribute ${Datalist_locator_with_all_attribt} data-list
should not be equal ${attribute_value} ${EMPTY}
Локаторы находятся в locator.robot
файле. Я не вызываю Get Element Attribute
ключевое слово в локаторах, потому что при этом не будет ссылки на его прямое выполнение и ссылку на возвращаемое значение в testcase… Так что просто сохраняйте локаторы в файле локатора, и больше ничего. Эти локаторы доступны, когда я сделал это Resource Locator.robot
в своем assertion.robot
файле. Как вы можете видеть, Get Element Attribute
элемент принимает первый аргумент locator элемента, а второй аргумент — это не что иное, как имя атрибута, значение которого вам нужно. И это ключевое слово возвращает значение атрибута, которое указано в качестве второго аргумента. —
*Variables
${Datalist_locator_with_all_attribt} xpath://div[@data-version='12345' and @data-list='1' and @data-point='10']
${locator_with_single_attribute} xpath://div[@data-version='12345']
Вывод
Способ 2 — Более рекомендуемый — оберните Get Element Attribute
и Should Not Be Equal
ключевые слова в одно ключевое слово. и сбросьте его в другой файл ключевого слова или создайте *keywords
раздел в locator.robot
самом файле. При этом ваш assertion.robot
файл будет выглядеть следующим образом —
*Test Cases
Test attributes Locator
Open Browser file:///C:/Desktop/testxpath.html chrome
Attribute values should not be empty
и locator.robot
будет выглядеть так. Вы можете сделать его более общим, хотя —
*** Variables
${Datalist_locator_with_all_attribt} xpath://div[@data-version='12345' and @data-list='1' and @data-point='10']
${locator_with_single_attribute} xpath://div[@data-version='12345']
*** Keywords
Attribute values should not be empty
${attribute_value}= Get Element attribute ${Datalist_locator_with_all_attribt} data-list
should not be equal ${attribute_value} ${EMPTY}
Комментарии:
1. Спасибо @Dev. Вы все это очень хорошо объяснили. Работают оба способа. Полагаю, теперь мне нужно выяснить, какой из них лучше всего подходит для меня.
2. Рад это слышать. Также, если вы обратите пристальное внимание на локаторы. и если вам не нужны значения атрибутов, отличные от этого случая, вы просто можете утверждать, что локатор существует на странице, в атрибутах которой нет необходимости. Просто поместите все атрибуты в локатор элемента.