1

I've been trying to automatize a report with python/selenium from a webpage. Right now I'm stock trying to select a radio button. Could you please help me with this issue, and if is possible some tips to make the code look/work better.

I'm using XPath Helper to identify XPaths but I'm getting a "Null" value for this:

//*[@id="ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration"] 

This is the error message that I get when I run the code:

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration']"} 

webpage code

<div class="indent"> <div> <input id="ctl00_ContentPlaceHolder1_rbUseDeviceDefaultConfigurations" type="radio" name="ctl00$ContentPlaceHolder1$gnConfigurationType" value="rbUseDeviceDefaultConfigurations" checked="checked"><label for="ctl00_ContentPlaceHolder1_rbUseDeviceDefaultConfigurations">Default Device Configurations</label> </div> <div> </div> <div> <span class="hasValidation"><input id="ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration" type="radio" name="ctl00$ContentPlaceHolder1$gnConfigurationType" value="rbUseSpecifiedDeviceConfiguration" onclick="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$rbUseSpecifiedDeviceConfiguration\',\'\')', 0)"><label for="ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration">Specify Device Configuration...</label></span> </div> <div class="indent"> </div> <div> </div> <div class="indent"> </div> </div> 

Python code

import time from selenium import webdriver import selenium.webdriver.support.ui as ui from selenium.webdriver.common.keys import Keys #Opens Chrome driver and maximize window driver = webdriver.Chrome('C:\Python27\selenium\webdriver\chrome\chromedriver.exe') driver.maximize_window() # Username and password for webpage username = 'XXX' #username to login in to web app password = 'YYY' #Password to login in to web app # Gets webpage driver.get('https://www.XXX-YYY.com/') # Automatized script to get from main page to Trending search_box = driver.find_element_by_xpath("//*[@id='_GlobalLoginControl_UserLogin']") # Fills username textBox search_box.send_keys(username) search_box = driver.find_element_by_xpath("//*[@id='_GlobalLoginControl_Password']") # Fills password textBox search_box.send_keys(password) search_box = driver.find_element_by_xpath("//*[@id='_GlobalLoginControl_LoginBtn']") # Click login Button search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='8:45']/ins") # treeBtn search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='8:218']/ins") # treeBtn search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='8:581']/ins") # Trending treeBtn search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='a8:583']") # tag search_box.click() time.sleep(6) search_box = driver.find_element_by_xpath("//*[@id='pageheading_menu_anchor']") # Related pages dropDownList search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='pageheading_menu_anchor_panel_s1_l4']") # Quick trending tag search_box.click() time.sleep(6) ############################## ### My issue is below this ### ############################## search_box = driver.find_element_xpath("//*[@id='ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration']") # Specify Device Configuration radioBtn search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='ctl00_ContentPlaceHolder1_DeviceTrendCfgSelector_ConfigurationListAnchor']/img") # Select Configuration dropDownList search_box.click() time.sleep(2) search_box = driver.find_element_by_xpath("//*[@id='ctl00_ContentPlaceHolder1_DeviceTrendCfgSelector_ConfigurationList']/div/a[3]") # 4 lease operator with memos and choke size search_box.click() 
3
  • Check whether radio-button located inside an iframe
    – Andersson
    CommentedMar 12, 2017 at 6:26
  • Yes it is in an iFrameCommentedMar 12, 2017 at 6:52
  • then first you need to switch into frame and then click on radio button
    – NarendraR
    CommentedMar 12, 2017 at 6:56

1 Answer 1

1

You should switch to iframe before handling radio-button:

driver.switch_to.frame(driver.find_element_by_tag_name('iframe')) search_box = driver.find_element_xpath("//*[@id='ctl00_ContentPlaceHolder1_rbUseSpecifiedDeviceConfiguration']") # Specify Device Configuration radioBtn search_box.click() 
3
  • Thanks for the info... It did not work :(... still looking for more info about iFrames... Thanks!CommentedMar 12, 2017 at 8:38
  • There might be more iframes on page. Share HTML for target iframe
    – Andersson
    CommentedMar 12, 2017 at 8:41
  • I found the issue, I was using single quotation marks instead of double This was the right onedriver.switch_to.frame(driver.find_element_by_tag_name("iframe"))CommentedMar 13, 2017 at 6:29

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.