【问题标题】:Exitting Python Webdriver Script with no error退出 Python Webdriver 脚本没有错误
【发布时间】:2016-11-23 14:10:38
【问题描述】:

我需要帮助才能退出测试而不会出错。我有这个代码:

tabla = self.driver.find_element_by_css_selector(".tablaSolicitudes")
for estado in tabla.find_elements_by_tag_name("td"):
    e = estado.text
if e.find("Multiadhesion") != -1:
    print("La solicitud " + solicitudes[i] + " se encuentra con MultiAdhesion. Finaliza el Test.")
    sys.exit()

如果该条件为真,则测试应结束。关键是,这样,我得到了这个错误:

sys.exit()
SystemExit

----------------------
Ran 1 test in 139.733s

FAILED (errors=1)

但是测试没问题,那么,我怎样才能做出正确的“测试退出”,以免出现这个错误?

非常感谢!

【问题讨论】:

    标签: python selenium-webdriver


    【解决方案1】:

    sys.exit() 引发 SystemExit 异常,您可以使用它进行测试:

    with self.assertRaises(SystemExit):
        your_method()
    

    现在你的测试应该成功了。

    【讨论】:

    • 有效,但继续执行,不会结束测试。
    【解决方案2】:

    我不确定sys 是否在您的代码中定义得更高,但这可能是测试出现问题的原因。

    要关闭 Selenium 浏览器测试(我相信您正在使用,从 selenium-webdriver 标签推断),通常使用 .close().quit() 标签。假设sys 是浏览器,在if 语句的末尾,您将使用sys.closesys.quit 关闭浏览器。

    .close() 将关闭测试浏览器中的选项卡。 .quit() 将关闭浏览器窗口。

    如果您需要更多帮助,请查看Selenium Python Bindings Documentation。在编写 python/selenium 测试时,它一直对我有很大帮助。

    【讨论】:

    • sys 只显示“exit”选项,而不是 close() 或 quit(),如果我执行 self.driver.quit() 它也会失败。
    【解决方案3】:

    如果您真的想停止测试,那么其中一种方法是使用-f 中的强制停止unittest

    -f, --fail: fast 在第一个错误或失败时停止测试运​​行。

    尝试使用 -f 选项运行模块:

    python sample.py -f
    

    但是,它不会将测试标记为通过,您应该从 try..except... 块中删除 sys.exit()

    如果您可以控制要运行的测试,则可以执行以下操作:

    1. 在要退出的方法中设置shouldStop = True(参考here
    2. 测试方法运行后检查(每个测试方法返回TestResult对象给它的调用者),是True还是False,如果是True,调用STOP()方法。 (参考here

    另一个选项是pytest 框架,它提供了退出运行的工具。在要退出的任何地方添加以下行:

    pytest.exit("decided to stop the test run")
    

    参考:

    1. How to stop all tests from inside a test or setUp using unittest?

    旧答案:

    替换sys.exit()如下:

    try:
        sys.exit()
    except:
        print "its ok"
    

    sys.exit() 返回 SystemExit 异常。

    我假设您使用的是unittest 框架。只有当测试方法中没有失败/异常时,测试才会被标记为PASS。由于 sys.exit() 抛出异常,unittest 将其标记为FAIL

    我们所做的是,在测试方法本身中处理异常,因此不会抛出异常/失败,这使得unittest 将该测试方法标记为PASS

    【讨论】:

    • 这样做,测试尝试继续执行(在该代码之后,方法保持):/ 非常感谢!
    • 太棒了!尽管以其他方式解决了它,但它接近于我正在寻找的东西。在像 UFT 这样的工具中,你有这句话 ExitTest 就是这样,但是 webdriver 使它变得更复杂一些。非常感谢大家的回答,你们真的知道自己在说什么!
    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2020-04-23
    相关资源
    最近更新 更多