Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как проверить включена радио-кнопка или нет?

python
selenium
webdriver
Теги: #<Tag:0x00007f7b69f81830> #<Tag:0x00007f7b69f81088> #<Tag:0x00007f7b69f80ed0>

(Aikrasnov) #1

Всем привет!

Есть радиокнопки вида:
input type=“radio” name=“sex” id=“sex_MALE” class=“class1” value=“MALE”
и
input type=“radio” name=“sex” id=“sex_FEMALE” class=“class1” value=“FEMALE”

Работают, по крайней мере, как радио-кнопки.
Мне нужно проверить, что выбрана правильная кнопка.
Проблема в том, что is_selected() – всегда возращает False. Независимо от того, выбрана кнопка или нет.

Использую python3 + selenium.
Заранее спасибо за помощь.


(sidelnikovmike) #2

Посмотрите по атрибутам, может какой-то меняется при выборе? ну и его потом читайте и проверяйте


(Aikrasnov) #3

Именно, из тега input? один из: type, name, id, class, value? Из этих ничто не меняется.


(Ray Romanov) #4

На сколько помню, атрибут checked за это отвечает…


(Aikrasnov) #5

self.element.checked
AttributeError: ‘WebElement’ object has no attribute ‘checked’

На странице, или у в selenium?


(sidelnikovmike) #6

Ну попробуйте может быть у родителя что-то меняется. Если изменилось отображение - то должен поменяться и аттрибут.


(Aikrasnov) #7

На CSS надо смотреть?


(Farof Well) #8

Страница на которой кнопки в общем доступе? А то проще посмотреть и помочь чем объяснять. Как вам и сказали по клику что то должно меняться на странице, да и isSelected по идее должно работать если локатор верен


(Aikrasnov) #9

В открытом доступе нет :frowning:
Локаторы верные, это точно.

Возможно у меня в коде ошибка?

def check_gender_patient(self, gender=None):
    """
    Проверить, выбран, ли выбранный пол.
    Если нет, то возбудить исключение!
    """
    if not gender:
        raise RuntimeError('Не передан пол для проверки!', gender)
    if gender=='мужской':
        gender_button = self.__make_gender_male()
        check = gender_button.is_selected()
    elif gender=='женский':
        gender_button = self.__make_gender_female()
        check = gender_button.is_selected()
    if not check:
        raise RuntimeError('Переданный пол: {0}, не выбран!'.format(gender))

и соответственно, как я ищу кнопки:

def __make_gender_male(self):
    select_gender_male_locator = 'sex_MALE'
    select_gender_male_locator_type = 'id'
    button_male = Buttons(self.driver, 
                        select_gender_male_locator, 
                        select_gender_male_locator_type)
    return button_male
def __make_gender_female(self):
    select_gender_female_locator = 'sex_FEMALE'
    select_gender_female_locator_type = 'id'
    button_female = Buttons(self.driver, 
                            select_gender_female_locator, 
                            select_gender_female_locator_type)
    return button_female

Для Buttons определен is_selected():

def is_selected(self):
“”"
Проверить нажата ли кнопка.
Вернет true или false, в зависимости от состояния.
“”"
return self.element.is_selected()

Данные кнопки по id однозначно опознаются

input type=“radio” name=“sex” id=“sex_MALE” class=“class1” value=“MALE”
и
input type=“radio” name=“sex” id=“sex_FEMALE” class=“class1” value=“FEMALE”


(sidelnikovmike) #10

Вы говорите, что при нажатии никакой аттрибут не меняется - то следовательно и isSelected не отработает.
Возьмите свой элемент и его родителей. И понажимайте. Последите за тем, меняется ли какой-то из аттрибутов в рядом стоящих элементах - класс или еще что-то. Не может просто при нажатии ничего не происходить с элементом. У него как минимум стиль поменяться должен. А в основной своей массе - меняется класс или выставляется определенный аттрибут типа checked или схожего


(Aikrasnov) #11

Ага, понял.
Буду смотреть внимательно на элементы рядом и стиль самого элемента (у него цвет меняется, по крайней мере).


(Farof Well) #12

Ну вот раз цвет меняется значит этот парметр где то передается и его можно проверить. Ну а “вобудить” исключение просто улыбнуло)))