1

I am working with Selenium and Python. I am struggling to use the click() method in order to click a dynamically created radio button. The markup for the radio is below.

<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>

The code I have is:

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

However the following error is produced:

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

The radio appears to be simulated by changing the image when the label is pressed. In other words, when clicked the class changes to radio-label selected.

radio

How can I click on the radio button with Selenium, bearing in mind it is not currently visible?

RiggsFolly
94.8k22 gold badges108 silver badges151 bronze badges
asked Nov 29, 2016 at 20:38
2
  • What happens if you add a pause before the click? (This is not the solution, only a further debug step) Commented Nov 29, 2016 at 23:13
  • I think clicking on label would select the checkbox, you should once as driver.find_element_by_css_selector('label[for="radio_1"]').click() and let me know.. Commented Nov 30, 2016 at 3:23

2 Answers 2

1

try explicit condition to wait for the element to be displayed. (if it is time-related issue, i.e., takes time to display)

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

This waits up to 10 seconds before throwing a TimeoutException or if it is present on the DOM of a page and visible, will return it in 0 - 10 seconds. WebDriverWait by default calls the ExpectedCondition every 500 milliseconds until it returns successfully. A successful return is for ExpectedCondition type is Boolean return true or not null return value for all other ExpectedCondition types.

Reference:

  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
answered Nov 30, 2016 at 6:40

Comments

1

C#

You can use waiter to element to become visible like this:

var element = Waiter.Until(ExpectedConditions.ElementIsVisible(By.Id("ID"))).FirstOrDefault();
answered Nov 30, 2016 at 20:03

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.