1
selenium 3.0.2 
safari 10 (using built in safari driver) 
python 2.7.10 
OSX 10.11.16(El Capitan)

如何使用 send_keys(Keys.Right) 多次执行按键事件(右/左/上/下)(即尝试使用按键重复按键动作来移动焦点)

示例:使用下面的代码三次无法输入右键。

driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  

不存在错误,只是没有执行第二次按键事件。但是,如果在序列中发送了另一个方向键,那么它可以工作,但是一旦使用一个键方向,那么相同的方向键就不能在同一个 safari 驱动程序会话中工作。

示例:如果在单个 Safari 驱动程序会话中按顺序执行以下操作,则:

driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT) #Works  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT) #Doesn't Work  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT) #Works  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT) #Doesn't Work 

例子:

driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT) #Works  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT) #Works  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT) #Doesn't Work  
driver.find_element_by_xpath("//body").send_keys(Keys.UP) #Works  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT) #Doesn't Works  

预期结果:焦点应与调用发送键方法的次数相同。波纹管按键事件应将 safari10 浏览器中的选择移动到右侧的三个选择,向下的两个选择和向左的两个选择。

例子:

driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)  
driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)  
driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT)  
driver.find_element_by_xpath("//body").send_keys(Keys.LEFT) 

实际结果:焦点只会向右移动一次。如果焦点在同一个方向,第二次按键甚至不会移动焦点。

注意:上述示例和步骤适用于 Firefox。

4

4 回答 4

0

听起来这些send_keys事件被视为key_down在多次应用而没有key_up被触发的情况下没有效果的事件。这听起来像是 Safari 驱动程序中的错误,您可能需要报告它。send_keys同时,您可以尝试在重复动作之间添加一个无用的按键;不会对页面产生任何影响的东西。但这更像是一种破解而不是修复。

例如:

driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)
driver.find_element_by_xpath("//body").send_keys("y") # pick a key that doesn't do anything
driver.find_element_by_xpath("//body").send_keys(Keys.RIGHT)
于 2017-03-27T11:30:00.270 回答
0

尝试观看模拟浏览器的机械化库,您可以执行许多操作。无论如何尝试在两个命令之间设置延迟,因为浏览器可能无法像你现在那样立即读取响应

于 2017-03-20T12:59:11.440 回答
0

尝试使用动作链:

from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChain(element)
actions.send_keys(Keys.RIGHT)  # actions are appened in a sort of waiting list
actions.send_keys(Keys.RIGHT)
actions.perform()  # then they are executed
于 2017-03-22T21:21:34.987 回答
0

这是一个驱动程序错误,它不再存在于 macOS High Sierra/Safari 11 中。在以下错误中跟踪 WebKit 中的修复:

于 2017-08-10T19:18:30.170 回答