Вам нужно чтоб работало как в питоне или в зависимости от наличия отсутсвия возвращало 1 или 0 соответственно ?
Почитав селениум2либрари кейворды понял что за ассерт по тексту в элементе отвечает “Element text should be”
Код по логике должен быть таким :
Open Browser http://www.test.com/panel browser=gc
Input Text id=login abcdef
Input Password id=password abcdef
Click Element css=input.submit
Wait Until Page Contains Element id=user--test--test2
Click Element id=user--test--test2
Element Text Should Be css=yourlocator yourtext message=yourerrrormessage
Из того кода, что я увидел на скриншоте, я могу предположить, что Banner.py уже может использоваться как библиотека.
Но почему-то вы подключаете его, как ресурс.
Зачем вам возвращать 1 или 0, если assert, как я помню, может вполне обрабатываться роботом.
В общем, вряд ли ваш поход зараборает, так как Вы строите ваши тесты на unittest, где ожидаете инициацию различных фикстур через setUptearDown методы. Но если Вы создадите весь код в обычных методах без setUptearDown, то скорее всего должно сработать. Хотя надо проверять, у меня сомнения.
Спасибо extr3mal. Так чтобы работало как в python. Думаю для начала буду использовать Run Keyword if и Run Keyword Unless чтобы попробовать прогнать тест
Потому решил использовать 1 keyword который мне бы возвращал на виходе что тест прошел успешно, в то время как assert’s делали бы свое дело в тесте.
PageObject + python гораздо лучше чем обычный бот стиль в тестах, думаю перейти со временем на PageObject. Есть ли хороший туториал, который бы описал весь процесс (или по оддельности) создания тестов (python) в PageObject и имплементация их к Robot Framework ?
Спасибо большое
from SeleniumWrapper import SeleniumWrapper as wrapper
locators = {
"email": "id=Email",
"password": "id=Password",
"sign in": "id=submit",
"error messages": "css=.validation-summary-errors li"
}
class SignInPage(object):
def set_sign_in_email_as(self, email):
se = wrapper().connection
se.type(locators["email"], email)
def set_sign_in_password_as(self, password):
se = wrapper().connection
se.type(locators["password"], password)
def submit_sign_in_credentials(self, success=False):
se = wrapper().connection
se.click(locators["sign in"])
se.wait_for_page_to_load("20000")
def sign_in_error_message_should_be(self, message):
se = wrapper().connection
assert se.get_text(locators['error messages']) == message
from homepage import HomePage
from signinpage import SignInPage
class PageObjects(HomePage, SignInPage):
# your top-level keywords here
а тест вот так
*** Settings ***
Documentation A test suite with a single test for valid login. This test has
... a workflow that is created using keywords from the resource file.
Resource common_resource.txt
Test Setup Open Browser To English Home Page
Test Teardown Close Browser After Run
*** Test Cases ***
Invalid Login
Navigate To Sign In Page
Set Sign In Email As demo
Set Sign In Password As demo
Submit Sign In Credentials
Спасибо за ссылку. Наконец-то я расставил все точки в вопросе реализаций page object + robot framework. Единственное замечание: я бы локаторы вынес в отдельный python-файл
Ну это как смотреть на реализацию PageObject. Можно сделать по разному, а как удобнее, каждый решает сам. Я, например, придерживаюсь правила чтобы все локаторы относящиеся к конкретному PageObject были в одном модуле с реализуемым PageObject, чтобы меньше было тело движений в поиске и починке конкретного локатора. Если же у вас становиться слишком много локаторов в одном модуле, значит надо задуматься о правильной реализации PageObject. Может быть надо что-то модуляризировать, что-то разбить на более мелкие логические части.
Конечно этот пример большой давности (3 года уже), но я думаю можно заставить его заработать и в PyCharm.
В общем, времени как всегда у меня не так много и поэтому время ценно для меня. Соответственно, я могу помочь с этой задачей по скайпу, но тогда надо будет помочь нашему сообществу автоматизаторов и стать более активным участником (начать производить контент, а не только задавать вопросы), т.е. меняю консультацию на заметку или code recipe в нашу базу знаний по полученным знаниям.
Какой кейворд можно использовать чтоб прогнать тест без переписывания тестов в Selenium2 Library? Так как Run Keyword if, Run Keyword Unless не подходят в этом случае.
Тест подключен как библиотека может быть keyword “Get Library Instance”- Returns the currently active instance of the specified test library с библиотеки BuiltIn ?
Думаю этот пример должен работать с использованием Operating System library. Может пригодится кому то
Example
Setting Value
Library OperatingSystem
Variable Value
${PATH} ${CURDIR}/example.txt
Test Case Action Argument Argument
Example Create File ${PATH} Some text
File Should Exist ${PATH}
Copy File ${PATH} ${TEMPDIR}/stuff
${output} = Run ${CURDIR}${/}script.py arg
PageObject это всего лишь дополнительная абстракция, которая помогает разделить создание тестов от фактического взаимодействия с веб-приложениями. Конечно это можно сделать через кейворды RobotFramework. Кейворды как раз и для этого предназначены.
Другой вопрос, если нужно будет запрограммировать какую то логику в самых PageObjects, то насколько это будет просто сделать с помощью selenium2library или с помощью чистого программирования на Python?!
Моя практика показывает, что все же как не старайся, но запрограммировать логику PageObjects через кейворды selenium2library тяжело и получается слишком линейно. А в жизни много подводных камней, к которым надо приделывать разные воркараунды и с помощью чистого программирования на Python это значительно проще.
Даже не буду спорить , просто подход на чистом рб на мой взгляд будет крайне удобен тем , у кого нет навыков программирования , и они не планируют их получать
Вот вроде бы да, и многие так говорят, многие даже берутся за автоматизацию без знаний программирования, но в итоге, к сожалению, ничего хорошего из этого не получается. Из своей практики я встречал много таких случаев и не помню ни одного успешного кейса, все в какой-то мере начинали программировать (даже если не хотели) и развивали правильные подходы к автоматизации через программирование.
Как бы просто ты не делал кейворды, все равно человеку, который использует эти кейрворды необходимы хотя бы базовые навыки программирования того языка на котором были написаны эти кейворды.
Что еще раз доказывает, надо программировать 80% логики на python, а 20% на robot framework. Принцип Парето даже тут действует