使用Python和Firefox的Selenium WebDriver sendkeys()方法

13

我正在使用 selenium 2.25.0firefox 3python 2.6.6。我尝试运行一个使用 sendkeys() 的 selenium 函数:

 Webdriver.find_element_by_name( 'j_username' ).clear()
 webdriver.find_element_by_name( 'j_username' ).send_keys( "username" )

这段代码在我的电脑上运行正常。但是在另一台机器上运行时,用户名字段被留空,并继续执行脚本(没有报告任何错误)。

我可以看到在尝试发送用户名之前,该字段已被清除,因此我知道没有找到按钮/按钮名称的问题。我尝试在清除字段和发送用户名之间放置暂停,但这似乎也不起作用。

我需要保持我的Firefox和Selenium版本相同,还有什么其他东西可以解决这个问题吗?


我猜问题与较旧版本的Firefox和更新的Selenium不兼容有关。您可以尝试一些更近期的Firefox吗? - Edu
1
是的,你说得对。Firefox过时的原因是上传大文件。我已经更新到Firefox 10,并成功解决了文件上传问题。现在一切似乎都正常工作了。 - Sarah92
3个回答

8

你的代码看起来有些奇怪。通常情况下,你会先定位到一个元素,然后对其进行操作...而不是每次都重新定位。

可以尝试像这样:

from selenium import webdriver

driver = webdriver.Firefox()
elem = driver.find_element_by_name('j_username')
elem.clear()
elem.send_keys('username')

1
尝试了您的建议,但仍然存在留空字段的问题。 - Sarah92
Corey所描述的方式是正确的,但是在使用之前你需要导入Keys。我建议你查看文档而不是询问你能想到的任何问题...在这里:https://selenium-python.readthedocs.org/ - m3nda

2

我认为以下方法可以作为解决办法,可能会起到作用。

driver = webdriver.Firefox()
elem = driver.find_element_by_name('j_username')
elem.clear()
app = Application.Application()
app.window_(title_re='*.Firefox.*').TypeKeys('username')

最后两行是使用Python(pyWinauto)编写的。


2

我的问题与此相同,我通过将selenium版本从selenium==2.42.1降至selenium==2.25.0来解决它。

更改selenium版本后,测试能够使用send_keys()并使用send_keys(Key.ENTER)提交表单。

我目前在远程Debian Squeeze 6.0.8服务器上无窗口运行,使用的是Iceweasel 3.5.16。

Mozilla Iceweasel 3.5.16, Copyright (c) 1998 - 2010 mozilla.org

Distributor ID: Debian
Description:    Debian GNU/Linux 6.0.8 (squeeze)
Release:        6.0.8
Codename:       squeeze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接