2013-12-01 2 views
2

Я пытаюсь ввести текст в текстовое поле с селеном.python, выбирая текстовое поле с селеном

Обследования источника показывает следующее о прокручиваемой коде .. мой текст должен быть введен, где он говорит: «Текст идет здесь»:

<iframe id="tinymcewindow_ifr" frameborder="2" src="javascript:""" allowtransparency="true" title="Rich Text AreaPress ALT-F12 for toolbar. Press ALT-0 for help" style="width: 90%; height: 90px; display: block;"> 

    #document 
     <!DOCTYPE > 
     <html> 
      <head xmlns="http://www.site.org/xhtml"> … </head> 
      <body id="tinymce" class="mceContentBody " contenteditable="true" onload="window.parent.tinyMCE.get('tinymcewindow').onLoad.dispatch();" spellcheck="false" dir="ltr"> 
       <p> … </p> 
      </body> 
     </html> 

</iframe> 

Когда я пытаюсь выбрать текстовое поле с некоторой командой, как:

driver.find_element_by_name("tinymce") 

оно возвращает сообщение об ошибке, подобное этому;

File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 293, in find_element_by_name 
    return self.find_element(by=By.NAME, value=name) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 681, in find_element 
    {'using': by, 'value': value})['value'] 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 164, in execute 
    ... 

команда:

driver.find_element_by_id("tinymce") 

дает сообщение об ошибке:

File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 197, in find_element_by_id 
    return self.find_element(by=By.ID, value=id_) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 681, in find_element 
    {'using': by, 'value': value})['value'] 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 164, in execute 
... 

Как один выберите текстовое поле, как это с селеном?

+0

не вы содержание внутри фрейма? –

+0

@javo, да, это так. Я обновил вопрос в разделе iframe .. sry everyone, не думал, что это важно – user3053161

ответ

3

попробовать

driver.find_element_by_id("tinymce") 

Элементы HTML Forms имеют имя атрибута, то есть то, что вы пытались сопрягать с find_element_by_name.

Если у вас есть форма, как

<form> 
First name: <input type="text" name="firstname"><br> 
Last name: <input type="text" name="lastname"> 
</form> 

Вы могли бы соответствовать вход для имени с find_element_by_name('firstname'), но это не то, что вы хотите сделать прямо сейчас.

элемент вы хотите, чтобы выбрать выглядит эта

<body id="tinymce" class="mceContentBody " contenteditable="true" onload="window.parent.tinyMCE.get('tinymcewindow').onLoad.dispatch();" spellcheck="false" dir="ltr"> 

Таким образом, вы можете

  1. find_element_by_id("tinymce")
  2. find_element_by_css_selector("#tinymce")
  3. find_element_by_xpath("//*[@id='tinymce']")
  4. ...

... и для полноты картины ...

После того, как вы выбрали этот элемент, вы можете заполнить его с

driver.find_element_by_id("tinymce").send_keys("Hello world")

EDIT:

Иногда люди дону «Я понимаю, что выбор элемента работает в контексте текущей страницы. Если ваш контент находится внутри iframe, вам нужно сначала переключиться на этот iframe.

driver.switch_to_frame("frameName")

Затем вы можете вернуться с driver.switch_to_default_content()

См Selenium Python - Navigating

+0

@ user3053161 Я обновил свой ответ, я думаю, что у вас могут быть проблемы с iframe - и, пожалуйста, ** подумайте ** о селекторе, который вы используйте для 'switch_to_frame', не просто обновляйте свой вопрос с помощью другого stacktrace –

Смежные вопросы