如何在safari中执行相同的按键事件?

时间:2017-03-17 11:40:25

标签: python selenium safari safaridriver

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  

预期结果:在调用发送密钥方法时,焦点应在同一方向上移动多次。 Bellow键按下事件应该将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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试使用actionChains:

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

答案 2 :(得分: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)

答案 3 :(得分:0)

这是一个驱动程序错误,它已不再出现在macOS High Sierra / Safari 11中.WebKit中的修复程序会跟踪以下错误: