【问题标题】:how to perform same key press event in safari?如何在 Safari 中执行相同的按键事件?
【发布时间】:2017-03-17 11:40:25
【问题描述】:
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。

【问题讨论】:

  • 你见过auto.py还是robots?
  • 没试过,使用python UnitTest框架。

标签: python selenium safari safaridriver


【解决方案1】:

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

【讨论】:

  • mmm ,我认为如果你尝试更好地学习 safari 文档会更好,因为我可以假设 safari 会阻止这种顺序访问,但我不确定,无论如何理解更好的 safari 仍然可以好主意
  • 感谢您尝试杜卡。我将尝试挖掘 safari selenium 文档。
【解决方案2】:

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

【讨论】:

  • 谢谢,但已经尝试过了。相同的行为,它不允许在同一方向上多次击键
【解决方案3】:

听起来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)

【讨论】:

  • 感谢您的输入,我已经尝试过了,并且看到了相同的行为。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多