2016-11-29 2 views
1

Я работаю с Selenium и Python. Я пытаюсь использовать метод click(), чтобы щелкнуть динамически созданный переключатель. Разметка для радио ниже.Selenium - не могу нажать на скрытый элемент

<input version="2" value="1" class="linked-ftb-radio meta(controlNumber=2)" id="radio_1" name="IndexString" reference="TEST 01" type="radio"> 
<label for="radio_1" id="linked-label" class="radio-label"></label> 

код у меня есть:

driver.find_element_by_xpath('//*[@id="radio_1"]').click() 

Однако получается следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "index.py", line 41, in <module> 
    driver.find_element_by_xpath('//*[@id="radio_1"]').click() 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium/webdriver/remote/webelement.py", line 74, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium/webdriver/remote/webelement.py", line 457, in _execute 
    return self._parent.execute(command, params) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute 
    self.error_handler.check_response(response) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 

радио, как представляется, моделируется путем изменения изображения при нажатии на ярлык. Другими словами, при нажатии на класс изменяется на radio-label selected.

radio

Как я могу нажать на кнопку радио с селеном, имея в виду, что в настоящее время не видно?

+0

Что произойдет, если вы добавите паузу перед нажатием кнопки? (Это не решение, а еще один шаг отладки) –

+0

Я думаю, что щелчок на метке выберет флажок, вы должны как-то раз «driver.find_element_by_css_selector (« label [for = «radio_1»] »). Click()' и дайте мне знать .. –

ответ

1

попробуйте explicit condition, чтобы дождаться появления элемента. (Если это вопрос времени, связанные, т.е., требуется время для отображения)

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, "//*[@id='radio_1']")) 
element.click() 

Это ждет до 10 секунд, прежде чем выбросить TimeoutException или если он присутствует на DOM страницы и видимой, будет верните его через 0 - 10 секунд. WebDriverWait по умолчанию вызывает ExpectedCondition каждые 500 миллисекунд, пока он не вернется успешно. Успешное возвращение для типа ExpectedCondition - это Boolean return true или not null возвращаемое значение для всех других типов ExpectedCondition.

Ссылка:

  1. https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html#selenium.webdriver.support.expected_conditions.visibility_of_element_located
  2. http://selenium-python.readthedocs.io/waits.html
+1

Nice Answer ... –

1

C#

Вы можете использовать официанта к элементу, чтобы стать видимым, как это:

var element = Waiter.Until(ExpectedConditions.ElementIsVisible(By.Id("ID"))).FirstOrDefault(); 
Смежные вопросы