2016-11-29 10 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 "]')としておく必要があります。私に教えて.. –

答えて

1

try explicit condition要素が表示されるまで待ちます。意志、

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

これはTimeoutExceptionをスローする前に10秒まで待つか、ページと見えるのDOMに存在する場合(それは時間関連の問題、すなわちある場合、表示に時間がかかります) 0〜10秒後にそれを返します。 WebDriverWaitは、デフォルトで正常に返されるまで500ミリ秒ごとにExpectedConditionを呼び出します。成功した戻り値はExpectedCondition型です。ブール型の場合はtrue、それ以外のExpectedCondition型の場合は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

Nice Answer ... –

1

C#

あなたがこのような目に見えるようになるために要素にウェイターを使用することができます。

var element = Waiter.Until(ExpectedConditions.ElementIsVisible(By.Id("ID"))).FirstOrDefault(); 
関連する問題