Атрибут переменной платформы робота в отдельном файле, не сохраняющий атрибут для использования в другом месте

#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. Рад это слышать. Также, если вы обратите пристальное внимание на локаторы. и если вам не нужны значения атрибутов, отличные от этого случая, вы просто можете утверждать, что локатор существует на странице, в атрибутах которой нет необходимости. Просто поместите все атрибуты в локатор элемента.