Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

locators
python
Теги: #<Tag:0x00007fedbb325ae0> #<Tag:0x00007fedbb325928>

(Вадим) #1

Есть форма, с чекбоксом, который надо нажать, структура HTML - http://prntscr.com/j0qrmc

Подскажите, как нажать/активировать чекбокс ?


(Maxim Andryushchenkov) #2
//div[@id='ordermodal-disclaimer']//input

Если не подойдет - можете span вместо input указать


(Вадим) #3

Пробовал так, но не стабильно отрабатывает( Возможно как-то JS-ом его кликнуть ? Добраться по другому к нему не могу - http://prntscr.com/j0rqhs


(Taras) #4

ето псеудо елемент - он не доступен веб драйверу, так как его в DOM нету
https://groups.google.com/forum/#!topic/selenium-users/ZUi9cenA13o

я думаю простой клик на div должен работать //div[@id=‘ordermodal-disclaimer’]


(Maxim Andryushchenkov) #6

Попробуйте найти элемент и кинуть его в такую функу:

driver.execute_script("arguments[0].click();", element)

(Вадим) #7

Не помогло, буду просить разработчиков чтоб какой-то div добавили


(Dmytro Kryshtopenko) #8

Да ну, попробуйте: “//div[@id=’'ordermodal-disclaimer]/label/input[@type=‘checkbox’]”
p.s. и не забывайте про isSelected и click методы.


(Вадим) #9

К сожалению не помогло. Сам ::before лежит в span блоке.


(Oleksandr Khotemskyi) #10

css

#ordermodal-disclaimer input[type="checkbox"]

(Вадим) #11

К сожалению для меня и такой вариант нерабочий (


(Дмитрий Кравчук) #12

xpath

.//span[contains(text(),‘some text in span’)]/preceding-sibling::input[@name=‘name of your checkbox’]

либо, если вы уверены, что на том же уровне вложенности что и span больше нет input’ов то

.//span[contains(text(),‘some text in span’)]/preceding-sibling::input[1]

В общем задача сводится к тому, чтобы однозначно определить локатор нужного вам span’a и дописать туда preceding-sibling


(Сергей Кузьмин) #13

можете вырезать и показать пример того элемента что не нах не скриншот а standalone page?


(Dmytro Kryshtopenko) #14

P.S. В любом случае, вы всегда можете “выдрать” полный xpath с вебэлемента через браузер, каким бы страшным он не был


#15

У меня в похожей ситуации, вот так работает:
elem= driver.find_element_by_xpath("//p[@class='terms']") ActionChains(driver).move_to_element_with_offset(elem,14,14).click().perform()

ну и в импорт добавить:
from selenium.webdriver.common.action_chains import ActionChains


(Lev Yarushin) #16

Попробуйте кликнуть на label

//div[@id=’'ordermodal-disclaimer"]/label


(Вадим) #17

Не помогает. Попросил разработчика переделать этот блок


(Mr Ds Low) #18

Copy selector или xpath helper вообще не помогли чтоли. Как говорили, не может быть чтобы он совсем не выделялся, если только он не в shadow-root.


(Serhii Kupriienko) #19

1)Попробуйте установить расширение для браузера хром - Katalon Recorder (Selenium IDE for Chrome)
2)Запишите простой сценарий с заполнением чекбокса
3)Выполните сценарий через расширение, если выполнение успешно - спишите локатор по которому оно обращается к елементу.


(Lev Yarushin) #20

Наверное такой элемент не один?
Попробуйте посмотреть в консоли по xpath $x(“xpath”)
Или поставьте расширение от Ranorex (Selocity) в Chrome, он тоже показывает количество