带有 Selenium 的 Python : rerun on pre-existing browser

标签 python selenium webdriver

我正在使用 Python 和 Selenium 2.44。当测试失败时,我不能在调试时将失败前的所有代码都取消注释,因为不会为浏览器声明驱动程序。因此,每当我尝试修复某些东西时,我总是必须在测试用例中打开一个新的浏览器。这相当……慢,因为我必须登录,这又增加了 30 秒(不是毁灭性的,但很烦人)。我想知道是否有办法让我继续一个 session ,或者做一些允许我在中途开始测试的方法(所以如果我已经打开了网页,我可以立即开始点击东西而不是打开一个新的浏览器)。这可能吗?

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

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

这应该会打开 Firefox,转到 google,然后搜索 cats。不过,假装在真正进入 google 页面之前你必须做很多事情。现在,如果它在搜索猫时失败,我能够测试以查看我是否修复了代码的唯一方法是重新运行测试(webdriver.Firefox() 将打开一个新浏览器)。而不是那样,假设我仍然打开谷歌,我希望 selenium 测试只是在以前的浏览器和谷歌页面上开始(因此说代码中的第一步是 send_keys("cats "))。这可能吗?

我认为这是一个类似的问题,但它没有被选中作为回答: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?

谢谢。

最佳答案

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

将它放在您的代码中将停止测试的进行,直到您告诉它在您的 shell 中继续。

使用您的代码片段:

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)

将在获取 url 后停止执行,允许您进行修补,然后从测试停止的地方继续。

或者,在调试时,您可以删除 driver.quit() 语句,无论它在哪里,这将使浏览器在断言失败的任何地方保持打开状态。但是,如果您将 Django 之类的框架与 LiveTestServer 客户端一起使用,您将无权进一步浏览该站点。 pdb 将允许您保持测试服务器处于事件状态。

关于带有 Selenium 的 Python : rerun on pre-existing browser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118130/

相关文章:

c# - Webdriver 如何等到元素在 webdriver C# 中可点击

java - 如何使用 Java 使用 Selenium 运行 ghostdriver

Python:CSV按列而不是按行写入

Python: string.find ('\n' ) 总是产生 -1

java - Selenium WebDriver 上传文件/关闭资源管理器窗口

javascript - HTML 日期/时间输入格式 'yyyy-MM-dd' 与 'MM/dd/yyyy' 在区域设置与 Selenium/Capybara 之间

python - 混合语言 - Python 和 Objective-C

python - 查找两个列表中不包含公共(public)字符的所有字符串对

c# - 忽略 ChromeDriver 用户偏好

c# - Selenium/C# WebDriverWait 不等待