2012-11-12 60 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...............