Robot framework - кроссбраузерное тестирование

Я новичок в автоматизации и хочу провести кроссбраузерное тестирование в среде роботов. Какой метод я могу добавить в файл управления браузером, чтобы мой тестовый пример запускался в нескольких браузерах https://github.com/MarkusBernhardt/robotframework-selenium2library-java/blob/master/src/main/java/com/github/markusbernhardt/selenium2library/keywords/BrowserManagement.java

Спасибо, ваша помощь очень ценится!

Пожалуйста, поясните, что именно вы имеете в виду, говоря «чтобы мой тестовый пример выполнялся в нескольких браузерах». Вы хотите запустить тест один раз в Chrome, а затем в Firefox и так далее? Или - и это действительно сильно подталкивает, и на основе ссылки github в вашем вопросе :) - вы хотите, чтобы ваш тест одновременно выполнялся в Chrome, Firefox, Edge и многом другом? Последнее, безусловно, новая идея, но требует кардинальных изменений в библиотеке :). Или вы преследуете третью вещь, которую я не могу вывести из вашего вопроса?

Todor Minakov 14.09.2018 06:23

Спасибо за ваш ответ! В идеале я бы хотел, чтобы 2-й вариант работал. Однако я думаю, что было бы оптимальным подходом для первого варианта - запускать тестовый пример для нескольких браузеров последовательно?

Abhilasha 14.09.2018 17:05

Ключевое слово Open Browser имеет в качестве аргумента имя браузера; поэтому за один раз вы передадите «Chrome», затем в следующем - измените его на «Firefox» и так далее.

Todor Minakov 14.09.2018 17:46

Это то, что я делаю, и помещаю это в цикл для каждого браузера. Я просто хотел убедиться, есть ли другой оптимальный способ сделать это. Например, переопределение класса управления браузером и передача списка браузеров в виде объединенной строки с помощью аргументов JRE. Это было то, что мне не нужно было писать цикл браузеров в каждом моем тестовом примере.

Abhilasha 14.09.2018 18:57

Похоже, то, что вы делаете, слишком сложно; Оптимальным способом было бы иметь тестовые примеры, реализующие то, что вы тестируете, а затем запускать разные прогоны в другом браузере. Это имеет дополнительное преимущество, заключающееся в том, что все случаи будут запускаться во всех браузерах - в том, что вы описываете, если цикл выполняется в 3 браузерах и он не работает для первого, другие 2 не будут запущены, верно? (то есть, если вы не приняли особые меры предосторожности, например, дополнительные накладные расходы) Вы хотите, чтобы я написал для вас образец подхода «набор-запуск-на-браузер»?

Todor Minakov 14.09.2018 19:04

Это тоже было одной из моих проблем. Было бы здорово, если бы вы могли предоставить образец для руководства, спасибо за вашу помощь! Действительно ценится

Abhilasha 14.09.2018 19:23
0
6
2 379
2

Ответы 2

SeleniumLibrary не имеет возможности запускать одну и ту же команду в нескольких браузерах. Эта функция действительно звучит довольно круто, но потребует в ней некоторых модификаций (все вращается вокруг передачи одной и той же команды всем браузерам) и заботы о любых непредвиденных обстоятельствах в ее текущей архитектуре (что должно произойти, если один из драйверов селена потеряет подключение, но остальные работают нормально? и т. д.).

Обычный подход к тестированию с несколькими браузерами - запускать набор кейсов по одному для каждого браузера. Таким образом, будет создана матрица полного покрытия - запуск в одном браузере не влияет на работу в другом.

Очень простой пример того, как это сделать - код со встроенными комментариями:

*** Settings ***
Documentation     A suite of cases.

Library             SeleniumLibrary

# the browser will be opened in the start-up of the suite
Suite Setup         Open Browser    url=https://www.google.com      browser=${browser}    # which browser? the one that's the value of the variable
Suite Teardown      Close Browser   # and closed when the suite finishes

*** Variables ***
# the variable will hold the name of the target browser
${browser}      Chrome          # a default value, if not overriden

*** Test Cases ***
Test this
    [Documentation]     Do this then that and verify the thing.
    Go To      https://www.yahoo.com
    My Keyword 1
    My Keyword 2

Verify That
    [Documentation]     Another case
    My Keyword Doing Thing       with argument
    Log     log message

Итак - фактический браузер, который нужно использовать, - это значение переменной ${browser}. Если он не переопределен, он имеет значение по умолчанию (в данном случае Chrome).

А теперь, чтобы запустить другой браузер, вы просто задаете ему его имя в интерфейсе командной строки для запуска запуска; образец:

robot --variable browser:Firefox suites\sample.robot

Аргумент --variable используется для установки значения единицы; он представлен в формате var_name:value. Это кстати подробно описано в руководство пользователя, раздел «Переменные».

Таким образом, вы можете запустить один запуск с Chrome, другой с Firefox и так далее.

Небольшой совет - по умолчанию журналы выполнения находятся в файлах с именами «output.xml», «log.html» и «report.html». Если вы запустите 3 запуска с 3 разными браузерами и не будете копировать файлы, они будут перезаписаны. Лучше определить собственное имя для каждого, чтобы упростить обработку. Это делается с помощью этих трех аргументов - --output, --log и --report; Например:

robot --variable browser:Edge --output output-edge.xml --log log-edge.html --report report-edge.html suites\sample.robot

P.S. Я понимаю, что вы используете RF в jython, но у меня нет этой среды, поэтому ванильный автономный RF - вы можете настроить примеры CLI и импорт библиотеки с помощью руководства пользователя.

Спасибо за вашу помощь! Я попробую использовать этот подход и расскажу, как это происходит.

Abhilasha 17.09.2018 15:45

Есть пабот. Параллельный исполнитель тестов Robot Framework.

И у него есть возможность:

--argumentfile[INTEGER] [FILEPATH] Run same suites with multiple argumentfile options. For example:

--argumentfile1 arg1.txt --argumentfile2 arg2.txt

Например, содержимое файла аргументов (firefox.txt) для тестов Mozilla Firefox:

--name      Mozilla Firefox Suites
--variable  BROWSER:firefox

И команда оболочки:

   pabot --argumentfile1 ${ROBOT_CONFIG}/chrome.txt \
         --argumentfile2 ${ROBOT_CONFIG}/firefox.txt \
         --verbose

Ответы других на связанный вопрос:

Как мы можем запускать тестовые случаи в разных браузерах одновременно в robotframework с помощью Ride

Другие вопросы по теме