簡體   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