繁体   English   中英

如何在野生动物园中执行相同的按键事件?

[英]how to perform same key press event in safari?

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。

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

尝试使用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

听起来像send_keys事件被视为key_down事件,当多次应用而没有在key_up触发key_up时, key_down事件无效。 这听起来像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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM