2012-11-12 135 views
4

用更多的上下文更新: Selenium 1有一個叫做「setSpeed」的命令。這允許每個命令的執行速度減慢X毫秒。 Selenium 2(Webdriver)背後的團隊決定棄用此命令,現在無法減慢測試的速度,以便在執行過程中輕鬆地直觀地監控App。我已閱讀開發人員對他們爲何不推薦使用它的解釋,以及使用implicit_waits等建議的解決方法,但這並不能解決我(或其他人對棄用抱怨)的問題。也就是說,我希望通過設置全局執行速度來解決這個問題,該速度適用於單元測試中的每種方法或整套測試。更改測試的執行速度?

原題:我有不同的單元測試,我想使用不同延遲命令之間執行。我知道我可以在命令之間繼續複製和粘貼time.sleep,但是肯定有一種方法可以設置在指定方法中的每個命令之前運行的通用睡眠?

def test_x_test(self): 
    driver = self.driver 
    time.sleep(2) 
    print("running the First selenium command such as click button") 
    time.sleep(2)  
    print("running another Selenium command such as click link ") 
    time.sleep(2)  
    self.driver.quit() 

if __name__ == '__main__': 
    unittest.main() 
+0

您的請求過於籠統。你爲什麼需要一個計時器?你如何在測試中使用它?這個例子並沒有提供很多關於你真正想要什麼的見解,而且答案很大程度上取決於你想要達到的目標。 – Bakuriu

+1

據我所知,沒有辦法設置一個全局,並讓它延遲執行x。我能想到的唯一方法(這太可怕了,並且會導致遺忘),可以將函數本身進行字符串化,然後使用換行符分割,然後使用for循環遍歷每條指令,即「eval」它和x睡覺。同意@Bakuriu - 會更容易與更多的上下文,因爲這不應該是完成你想要的方式:) – RocketDonkey

+2

如果它是硒webdriver然後調用implicit_wait()。如果不是,那麼你可以模擬'driver'對象來引入可調用屬性的延遲,或者將函數放入一個字符串中並使用ast模塊進行轉換,或者可以替換函數的字節碼。順便說一句,你可以在這種情況下使用'exec',如果在你的總控制下的字符串,它提高了可讀性。 – jfs

回答

1

啊現在答案是如此明顯。

創建webdriver的動作控制,並執行置於暫停操作之前一個輔助方法:

下面將是僞十歲上下,因爲我再也不用在工作

訪問的Python IDE
#passing in Webdriver instance and the command we want to execute into our helper method 
webdriverHelper(driver, command): 
    #this 2 second sleep will get run each time 
    time.sleep(2) 
    if command == "click": 
     driver.getElement.click() 
    elif command== "getText": 
     driver.getElement.getText() 
    etc...............