Combo box Selenium+Python+pytest (скриншот+код)

screenshot
pytest
python
webdriver
selenium
Теги: #<Tag:0x00007fedbba53088> #<Tag:0x00007fedbba52e58> #<Tag:0x00007fedbba52cf0> #<Tag:0x00007fedbba52b10> #<Tag:0x00007fedbba52868>

(Olexander Davis) #1

Вопрос из заголовка. Понимаю что тема не новая, но все что перечитал сегодня вечером, не смог реализовать что бьі вьібрать значение из комбо бокс

Я попытался сделать:
Я вьітянул xpath для значения с combo box и через chrome и с помощью fire path в Mozilla
но єти значения не срабатьівают почему то когда прогоняю тест

Освоил Selenium+Python+pytest за 2 дня, сам, на проекте резко решили что нужна автоматизация smoke на python при том что питонщика в компании нету, тестировщика тоже 2 всего) и спросить и посоветуваться нескем, так вот сам и учусь паралельно тестируя два проекта

И вот код:

def test_create_survey():
driver.get(“http://cms.schooldata-test.com/login”)
driver.maximize_window()
# login action
driver.find_element_by_name(“email”).send_keys(“admin@admin.admin”)
driver.find_element_by_name(“password”).send_keys(“admin@admin.admin”)
driver.find_element_by_class_name(“btn”).click()
#surveys
driver.find_element_by_xpath(“html/body/div[1]/aside[1]/section/ul/li[7]/a”).click()
driver.find_element_by_xpath("/html/body/div[1]/aside[1]/section/ul/li[7]/ul/li[1]/a").click()
#add button
driver.find_element_by_xpath(“html/body/div[1]/div[1]/section[2]/div/div/div/div/div[1]/h3/a/i”).click()
driver.find_element_by_name(“title”).send_keys(“Auto survey”)
driver.find_element_by_id(“tagsIds”).click()
time.sleep(2)
driver.find_element_by_xpath("@id=‘tagsIds’]/option[3]").click()
driver.find_element_by_name(“description”).send_keys(“Some auto to to ot ot”)
driver.find_element_by_xpath("/html/body/div[1]/div[1]/section[2]/div/div/div/div/form/div[2]/button").click()
time.sleep(2)
driver.get_screenshot_as_file(“edit_admin.png”)
# out
driver.find_element_by_xpath(“html/body/div[1]/header/nav/div/ul/li/a”).click()

П.С Буду рад усльішать рекомендации, что можно улучшить уже в существующем коде или то что вьіглядит дико как для проффесионала/
Спасибо


(Oleksandr Khotemskyi) #2

нормально

теперь ваши темы для изучения -
css селекторы
assertions в pytest
классы и обьекты


(Maxim Zaitsev) #3

и курс по основам безопасности не помешает


(Maxim Zaitsev) #4

А вообще ответов полно в инете: https://yandex.ru/search/?text=python%20selenium%20select%20dropdown&lr=213&rnd=66645


(Oleksandr Khotemskyi) #5

Не усложняйте. Это функциональные тесты, пока можно жить и так.


(Maxim Andryushchenkov) #6

Учитесь писать гибкие XPATH пути


(Olexander Davis) #7

и курс по основам безопасности не помешает

Єт тестовьій, так что все нормально, он будет меняться.

Я пробовал много из них(ссылок), но та же ошибка, еще попробую конечно, если не выйдет, то напишу. Здесь на мак сам пайтест была проблема запустить в pycharm все как по инструкции, а ничего в результате не выходило, но как то решил.


(Olexander Davis) #8

Учитесь писать гибкие XPATH пути

Спасибо, почитаю про них, я думал их знать уже достаточно


(Olexander Davis) #9

Подскажите пожалуйста по нескольким вопросам:

После каждого теста я выставляю Log out, что бы ато тест выходил на страницу логина и снова выполнял все по порядку как в тест кейсе, если так не делаю, следующий тест валится, можно сделать по другому?
Если выставляю > driver.close()
окно браузера просто закрываеться и следующий тест не стартует тоже.
Как можно сделать гибко прохождение сюта.

Вот еще, сначала была проблема настроить pytest, как то все таки настроил, ну вот смотрю для каждого теста в блоке (1) создается новая конфигурация. А в блоке 2 просто скажите, настройки нормально выглядят, или из за того и проблема.
Спасибо большое.


(Oleksandr Khotemskyi) #10

Создайте отдельный вопрос.

И вообще вначале лучше запускать через консоль. Потом уже пользоватся раннерами.


(Olexander Davis) #11

вы и по первому не подсказали даже)


(Olexander Davis) #12

Решил вопрос таким способом:
Выбрал через css селектор и тест прошел успешно.

#dropdown option
driver.find_element_by_css_selector("#tagsIds > option:nth-child(3)").click()


(Maxim Zaitsev) #13

Лучше бы так:

tag = Select(driver.find_element_by_id("tagsIds"))
tag.select_by_visible_text('Auto Tag')

(Olexander Davis) #14

попробьівал, но команда select (unresolved reference bla bla) я так понял что у меня что то не долито для нормального функционирования


(Maxim Zaitsev) #15

Добавь к импортам:

from selenium.webdriver.support.ui import Select

За два дня, говоришь, изучил python ? xD


(Olexander Davis) #16

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

на счет импорта, єтот что тьі дал, вставился нормально, я почему прислал последний скриншот, потому что я не могу добавить больше никакой импорт, с форумов что читал, посл добавления они все ставали серьіми и не бьіли активньіми. А тут все ок, спасибо.

Только какая разница в tag.select_by_visible_text(‘Auto Tag’) и тот что я писал?


(Oleksandr Khotemskyi) #17

Не забивай себе голову, учи дальше - обьекты, классы, модули, как импортить, изучай библиотеку селенуима на питоне (рекомендую так же почитать ее исходники, чтобы увидеть как пишут опытные дядьки)


(Olexander Davis) #18

спасибо, ок.


(Maxim Zaitsev) #19

Код должен быть понятным не только тебе. К примеру, в данной случае далеко не каждый сразу поймет, что делает твоя строчка. Как минимум, придется открыть сайт и покопаться в исходнике да и еще про редко используемые css-локаторы знания освежить.


(Oleksandr Khotemskyi) #20

Ну че ты начинаешь

Чувак только второй день пишет код

Вспомни себя как только начинал - просто молишься чтобы оно хоть запустилось