使用selenium的Python:在预先存在的浏览器上重新运行

时间:2015-01-23 20:23:09

标签: python selenium webdriver

我在Selenium 2.44中使用Python。当测试失败时,我无法在调试失败之前取消注释所有代码,因为不会为浏览器声明驱动程序。因此,每当我尝试修复某些内容时,我总是要在测试用例中打开一个新的浏览器。这是相当......慢,因为我必须登录,这增加了额外的30秒(不是毁灭性的,但令人讨厌)。我想知道是否有一种让我继续开会的方式,或做一些让我在中途开始测试的方法(所以如果我已经打开了网页,我可以立即开始点击而不是打开一个新的浏览器)。这可能吗?

例如,如果我有以下内容:

driver = webdriver.Firefox()
driver.get("google.com")
driver.find_element_by_xpath("//input[@id='gbqfq']").send_keys("cats" + Keys.RETURN)

这应该打开Firefox,去谷歌,并搜索猫。尽管如此,在你实际进入谷歌页面之前,还是要做大量的事情。现在如果它在搜索cat时失败,我能够测试的唯一方法就是重新运行测试(webdriver.Firefox()将打开一个新的浏览器)。而不是那个,假设我仍然打开谷歌,我希望硒测试能够在之前的浏览器和谷歌页面上开始(因此说代码的第一步将是{{1 }})。这可能吗?

我认为这是一个类似的问题,但它没有得到答复:How to resume browser session or use existing browser window with Selenium-Python?

这个似乎也很相似,只与Java有关:How do I rerun Selenium 2.0 (webdriver) tests on the same browser?

感谢。

1 个答案:

答案 0 :(得分:1)

查看pdb:https://docs.python.org/2/library/pdb.html

将此代码置于代码中将停止测试的进展,直到您告诉它继续在您的shell中。

使用您的代码snippit:

from pdb import set_trace
driver = webdriver.Firefox()
driver.get("google.com")
set_trace()
driver.find_element_by_xpath("//input[@id='gbqfq']").send_keys("cats" + Keys.RETURN)
获取网址后,

将停止执行,允许您修改,然后从测试中断处继续执行。

或者,在调试时,您可以删除driver.quit()语句,无论它在哪里,这将使您的断言失败时浏览器保持打开状态。但是如果你使用像LiveDestServer客户端这样的Django这样的框架,你将无法进一步浏览网站。 pdb将允许您保持测试服务器处于活动状态。