2016-11-23 112 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