2016-11-23 114 views
2

我需要帮助退出测试而不会出错。我有这样的代码:退出Python 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) 

但测试是确定的,所以,我怎么能做出一个适当的“测试的出口”,让我不得到这个错误? 。

非常感谢!

回答

0

sys.exit()提出了SystemExit例外,您可以测试:

with self.assertRaises(SystemExit): 
    your_method() 

现在您的测试应该会成功。

+0

工作,但继续执行,不会结束测试。 – GHM

0

如果你真的想停止测试,然后的方式之一是使用武力停止-f提供unittest

-f, --fail: fast Stop the test run on the first error or failure.

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

python sample.py -f 

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

如果您对测试控制运行,那么你可以做如下:

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

OR

另一种选择是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() returns SystemExit exception.

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

我们所做的是,处理测试方法本身的异常,因此不会引发异常/故障,这使unittest将该测试方法标记为PASS

+0

这样做,测试试图继续执行(在该代码之后,该方法保持不变):/非常感谢您! – GHM

+0

太棒了!尽管如此解决它,这几乎是我所期待的。在UFT这样的工具中,你有这句话ExitTest,就是这样,但webdriver使它更复杂一些。非常感谢你的回答,你真的知道你在说什么! – GHM

0

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

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

.close() will close a tab within a testing browser. .quit() will close the browser window.

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

+0

sys只显示选项“退出”,不close()或退出(),如果我做self.driver.quit()它也会失败。 – GHM