测试失败后自动关闭webdriver实例

时间:2014-01-14 09:10:12

标签: python testing selenium python-unittest

我的英语很差,但我会尽力描述我遇到的问题。

我使用selenium webdriver测试网站,我用来编写脚本的语言是python。因此,我使用了Pyunit。

我知道如果我的测试套件没有异常,那么webdriver实例将被正确关闭(顺便说一句,我使用了chrome)但是,一旦抛出异常,脚本将被关闭,我必须关闭手动镀铬。

我想知道如何在python进程退出时实现这一点,任何剩余的打开的WebDriver实例也将被关闭。

顺便说一句,我使用了Page Object Design Pattern,下面的代码是我脚本的一部分:

class personalcenter(unittest.TestCase):

    def setUp(self):

        self.driver = webdriver.Chrome()
        self.page = personalCenter(self.driver,"admin","123456")

    def testAddWorkExp(self):

        blahblahblah...

    def tearDown(self):

        self.page.quit()
        self.driver.quit()

if __name__ == "__main__":

    unittest.main()

我已经搜索了这个问题的解决方案很长一段时间,但几乎每个答案都依赖于java和junit或testNG。我如何处理Pyunit的这个问题?

感谢您的每一个答案。

2 个答案:

答案 0 :(得分:1)

来自tearDown()文档:

  

调用测试方法后立即调用的方法   结果记录下来。即使测试方法引发了调用,也会调用此方法   异常,所以子类中的实现可能需要   检查内部状态特别小心。任何例外   通过这种方法提出的将被视为错误而不是测试   失败。 只有在setUp()成功时才会调用此方法,   无论测试方法的结果如何。默认   实施什么都不做。

因此,唯一不会调用tearDown的情况是setUp失败时。 因此,我只是在setUp中捕获异常,关闭驱动程序,并重新提升它:

def setUp(self):
    self.driver = webdriver.Chrome()
    try:
        self.page = personalCenter(self.driver,"admin","123456")
    except Exception:
        self.driver.quit()
        raise

答案 1 :(得分:1)

希望!!这会帮助你。您可能需要使用布尔表达式为 False 来关闭驱动程序

从 selenium 导入 webdriver

导入时间

class Firefoxweb(object):

def __init__(self):
    print("this is to run the test")

def seltest(self):

    driver=webdriver.Chrome(executable_path="C:\\Users\Admin\PycharmProjects\Drivers\chromedriver.exe")

    driver.get("URL")
    driver.find_element_by_xpath("//*[@id='btnSkip']").click()

    driver.find_element_by_xpath("//*[@id='userInput']").send_keys("ABC")
    driver.find_element_by_xpath("//*[@id='passwordInput']").send_keys("*******")
    driver.find_element_by_xpath("//*[@id='BtnLogin']").click()
    driver.close(False)

FF=Firefoxweb() FF.seltest()