2016-11-29 244 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默认每500毫秒调用一次ExpectedCondition,直到它成功返回。 ExpectedCondition的成功返回类型是布尔值,对于所有其他ExpectedCondition类型,返回true或非null返回值。

参考:

  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

尼斯答案... –

1

C#

您可以使用服务员元素变成这个样子可见:

var element = Waiter.Until(ExpectedConditions.ElementIsVisible(By.Id("ID"))).FirstOrDefault();