无法发送密钥selenium webdriver python

时间:2015-09-29 03:01:42

标签: python selenium webdriver

尝试执行简单测试

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get('http://google.com')
driver.find_element_by_name('q')
driver.send_keys('hey')

收到错误

Traceback (most recent call last):
  File "C:/webdriver/test.py", line 8, in <module>
    driver.send_keys('hey')
AttributeError: 'WebDriver' object has no attribute 'send_keys'

有什么问题?

6 个答案:

答案 0 :(得分:3)

WebDriver实例没有send_keys()方法。这就是错误的实际意义:

  

'WebDriver'对象没有属性'send_keys'

在您send_keys()方法返回的WebElement个实例上调用find_element_by_*()

find_element_by_name()

仅仅是FYI,还有一个ActionChains class可用于构建动作链或应用更复杂的动作,如拖放或鼠标移动。在这种情况下,这是一个开销,但仅仅是为了一个例子:

element = driver.find_element_by_name('q')
element.send_keys("hey")

答案 1 :(得分:0)

您必须更改参考元素

driver.get('http://google.com')
elem.find_element_by_name('q')
elem.send_keys('hey')

答案 2 :(得分:0)

您是否尝试更改参考元素? 如果您使用不同的引用调用webdriver,这将是一个很好的做法。 更改参考后的代码。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
driver.get('http://google.com')
#Firefox Webdriver is created and navigated to google.

elem = driver.find_element_by_name('q')
elem.send_keys('hey',Keys.RETURN)
#Keys.RETURN = Pressing Enter key on keyboard

time.sleep(5)
driver.close()

答案 3 :(得分:0)

我遇到了同样的问题,但我得到了解决方案。

move_to_element 中使用 ActionChains

  1. 查找元素。 elem = driver.find_element_by_*

  2. 创建您的操作链驱动程序 actions = ActionChains(driver)

  3. 使用move to命令,所以webdriver指向到那个元素的位置,但是在你发送key之前,你需要set > webdriver 使用 click() 函数在该元素上定位。现在,webdriver 有一个表面区域来放置给定的键(数据),为此您将使用 send_keys() 函数。最后只是把perform()函数执行这些所有的任务都非常顺利。 actions.move_to_element(<ELEMENT>).click().send_keys(<DATA>).perform()

    https://selenium-python.readthedocs.io/api.htmlt

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get('http://google.com')
elem = driver.find_element_by_name('q')
actions = ActionChains(driver)
actions.move_to_element(elem).click().send_keys('hey').perform()

答案 4 :(得分:0)

The problem with your code is you have not tell driver where to send the keys 

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    
    driver.get('http://google.com')
    driver.find_element_by_name('q')
    driver.send_keys('hey') // driver dont know where to send the keys

correct code would be :

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get('http://google.com')
goog = driver.find_element_by_name('q') // you have stored element in goog variable
goog.send_keys('hey') // you told variable to send hey 

or 

you can directly send after finding the element like :

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get('http://google.com')
driver.find_element_by_name('q').send_keys('hey')

If it helps so please accept the answer !!

答案 5 :(得分:-1)

它与导致问题的硒版本有关。我遇到了同样的问题。

它与硒版本3.3.3有兼容性问题。

尝试: pip卸载硒 pip install selenium == 3.3.1

希望它有效。