python,选择一个带有selenium的文本框

时间:2013-12-01 22:23:50

标签: python selenium

我正在尝试用selenium将一些文本输入textarea。

对来源的检查揭示了关于textareas代码的以下内容..我的文本应该输入“Text goes here”:

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

当我尝试用以下命令选择textarea时:

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

如何使用Selenium选择这样的文本框?

1 个答案:

答案 0 :(得分:3)

driver.find_element_by_id("tinymce")

HTML Forms中的元素具有name属性,即您尝试与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. ...
  5. ......为了完整起见......

    选择此元素后,可以用

    填充它

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

    编辑:

    有时候人们没有意识到选择一个元素是在当前页面的上下文中工作的。如果您的内容位于iframe中,则需要先切换到此iframe。

    driver.switch_to_frame("frameName")

    然后您可以使用driver.switch_to_default_content()

    返回

    请参阅Selenium Python - Navigating