Я пытаюсь нажать на кнопку радио внутри промежутка. Попытка выполнить:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys 


chromeDriver = webdriver.Chrome()
chromeDriver.get('https://www.flytap.com/pt-br/')

#Works Fine
chromeDriver.find_element_by_id('origin')
origin.click()
origin.clear()
origin.send_keys('(RIO) Rio De Janeiro -  todos os aeroportos , Brasil')
    origin.click()

#Where I got the error
milesBox = chromeDriver.find_element_by_id("booking-type-2").click()

#Also tried:
milesBox = chromeDriver.find_element_by_id("booking-type-2").send_keys(Keys.ENTER)

#And, finally:
milesBox = chromeDriver.find_element_by_id("booking-type-2").send_keys(Keys.SPACE)

Вот ошибка, которую я получил:

ElementNotVisibleException: Message: element not visible

HTML код:

<!-- Payment Methods START -->
                <fieldset id="booking-payment-drag" class="booking-payment">
                    <div class="toolbar-radio-wrapper">
                        <legend class="ipt-label">Reservar com:</legend>
                    </div>
                    <div class="toolbar-radio-wrapper">
                        <div class="radio">
                            <span class="checked"><input type="radio" id="booking-type-1" name="booking-type" value="1" checked></span>
                        </div>
                        <label for="booking-type-1" class="ipt-label">Dinheiro</label>
                    </div>
                    <div class="toolbar-radio-wrapper js-country-not-eligible">
                        <div class="radio">
                            <span class=""><input type="radio" id="booking-type-2" name="booking-type" value="2"></span>
                        </div>
                        <label for="booking-type-2" class="ipt-label">Milhas</label>
                    </div>
                        <div class="toolbar-radio-wrapper">
                            <div class="radio is-disabled js-country-eligible">
                                <span class=""><input type="radio" id="booking-type-3" name="booking-type" value="3" disabled></span>
                            </div>
                            <label for="booking-type-3" class="ipt-label">Miles&Cash</label>
                                                        </div>
                </fieldset>
0
Robson Tavares Junior 1 Мар 2018 в 04:55

3 ответа

Лучший ответ

В соответствии с HTML , которым вы поделились, чтобы щелкнуть переключатель рядом с <label> с текстом Милхас , вы можете использовать следующую строку кода:

chromeDriver.find_element_by_xpath("//input[@id='booking-type-2' and @name='booking-type']").click()
0
DebanjanB 1 Мар 2018 в 06:08

Вы можете использовать этот xpath

//div[@class='radio']//span//input[@id='booking-type-1']

//div[@class='radio']//span//input[@id='booking-type-2']

//div[@class='radio is-disabled js-country-eligible']//span//input[@id='booking-type-3']
0
iamsankalp89 1 Мар 2018 в 04:56

Похоже, что раскрывающийся список элемента origin охватывает переключатель, который вы пытаетесь нажать. Может быть, вы могли бы изменить порядок операций? Щелчок по элементу destination также открывает раздел, в котором находится переключатель, но кажется, что он его не охватывает. Это быстрый пример нажатия этой кнопки-переключателя, после чего вы можете заполнить ввод origin после.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.flytap.com/pt-br/')

destination = driver.find_element_by_id('destination')
destination.click()

miles_box = driver.find_element_by_id('booking-type-2')
miles_box.click()
0
G_M 1 Мар 2018 в 17:14