在没有错误的情况下退出Python Webdriver脚本

时间:2016-11-23 14:10:39

标签: python selenium-webdriver

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

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)

但测试没问题,那么,我怎样才能做出正确的“测试退出”以便我不会收到此错误?

非常感谢!

3 个答案:

答案 0 :(得分:0)

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

with self.assertRaises(SystemExit):
    your_method()

现在你的测试应该成功。

答案 1 :(得分:0)

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

中的强制停止unittest
  

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

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

python sample.py -f

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

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

  1. 在您要退出的方法中设置shouldStop = True(请参阅here
  2. 检查测试方法运行后(每个测试方法将TestResult对象返回给其调用者),无论是True还是False,如果为True,请调用STOP()方法。 (参考here
  3. 另一个选项是pytest框架,它提供退出运行的工具。在要退出的位置添加以下行:

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

    参考:

    1. How to stop all tests from inside a test or setUp using unittest?
    2. 旧答案:

      替换sys.exit(),如下所示:

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

      sys.exit()返回SystemExit异常。

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

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

答案 2 :(得分:0)

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

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

  

.close()将关闭测试浏览器中的标签页。 .quit()将关闭浏览器窗口。

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