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。
答案 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中的修复程序会跟踪以下错误: