День добрый !
Проблема состоит в следуещем, нужен тест который будет формировать корзину и выбирать каждый раз новый “способ оплаты” ( далее PM ).
Проблема следуещего рода:
После формирования корзины заходит на страницу РМ бежит по всем чекбоксам ( выбирая их но не нажимая оплатить ) все.
Страница PM ( http://awesomescreenshot.com/0c24l74bb5 ) имеет чекбоксы, у которых есть ID, НО у IDEAL и Creditcard есть дропдаун меню.
Я создал 3 массива, ИД всех чекбоксов и еще два для названия которые хранят IDEAL / Creditcard ( их выборку делаю с помощью Select)
Не могу грамотно составить цикл чтобы при входе в IDEAL/Credicard выполнились все PM который в них есть, а потом другие ( не важно в какой очередности )
При запуске просто прбегает по всем чекбоксам и ничего не происходит.
def checkCart(ideal, visa, pm): # принимает id всех pm и типы ideal/creditcard
addToCard(prodadd) # Функция добавления в корзину
for pm in pm:
driver.find_element_by_id(pm).click()
if pm == "ideal":
Select(driver.find_element_by_id("parentId-ideal")).select_by_visible_text(ideal)
elif pm == "visa":
Select(driver.find_element_by_id("parentId-ogonestd")).select_by_visible_text(visa)
driver.find_element_by_xpath("//div[@id='content']/form/div/div[2]/button").click()
def checkCart(ideal, visa, pm):
addToCard(prodadd)
for idealtext in ideal:
Select(driver.find_element_by_id("parentId-ideal")).select_by_value(idealtext)
driver.find_element_by_xpath("//div[@id='content']/form/div/div[2]/button").click()
driver.get(base_url)
addToCard(prodadd)
for visatext in visa:
driver.find_element_by_id("parentId-ogonestd").click()
Select(driver.find_element_by_id("parentId-ogonestd")).select_by_visible_text(visatext)
driver.find_element_by_xpath("//div[@id='content']/form/div/div[2]/button").click()
driver.get(base_url)
addToCard(prodadd)
for cred in pm:
driver.find_element_by_id(cred).click()
driver.find_element_by_xpath("//div[@id='content']/form/div/div[2]/button").click()
driver.get(base_url)
addToCard(prodadd)
Задачу решили, вот и хорошо, но я бы все таки рекомендовал бы более усовершенствовать код, так как:
одни и те же локаторы повторяются
локаторы написаны “не идеально”, можно лучше
код нечитабельный, разделяйте логику сценария от непосредственного взаимодействия с страницей
код для всех циклов несколько однотипный, можно увидеть одни и те же вызовы команд, лучше создать одну но универсально-гибкую функцию под три разных случая