[英]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.