【问题标题】:Python + WebDriver -- No browser launched while using unittest modulePython + WebDriver -- 使用 unittest 模块时没有启动浏览器
【发布时间】:2018-09-26 07:33:15
【问题描述】:

你能帮我做下一个吗? 我发现了问题,但无法解决。 当我使用下一个代码时,浏览器已经启动并且测试通过了:

import unittest
from selenium import webdriver
driver = webdriver.Chrome('D:\chromedriver\chromedriver.exe')
driver.get("site URL")

但与类和方法相同,返回消息:“进程以退出代码 0 完成”:

import unittest
from selenium import webdriver
class GlossaryPage(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='D:\chromedriver\chromedriver.exe')
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
    def NoLorem(self):
        driver = self.driver
        driver.get("site URL")
    def tearDown(self):
        unittest.quit()

如何使用第二种情况(使用方法和类)打开浏览器?

非常感谢您的帮助。

【问题讨论】:

  • 对我来说 chromeOperator = GlossaryPage()chromeOperator.setUp() 工作得很好。
  • 如果您将setUp 替换为__init__,那么在创建GlossaryPage 的实例时,它将打开一个浏览器
  • 不,它是特定于单元测试的

标签: python selenium selenium-webdriver webdriver python-unittest


【解决方案1】:

在使用 Selenium 处理 Python 的 unittest 模块时,您必须考虑以下几个事实:

  • 在传递 Key 时,executable_path 通过单引号和原始 r 开关提供 Value
  • 当您定义 @Tests 名称时,测试以 test 开头,例如def test_NoLorem(self):
  • 当您调用 get() 时,请确保您传递的是有效的 url,例如http://www.python.org
  • 当您在def tearDown(self): 中调用quit() 方法时,通过WebDriver 实例调用该方法作为self.driver.quit()
  • 如果您使用 unittest 模块,您必须通过 if __name__ == "__main__": 调用 Tests
  • 这是您自己的代码,需要稍作修改:

    import unittest
    from selenium import webdriver
    
    class GlossaryPage(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
            self.driver.maximize_window()
            self.driver.implicitly_wait(10)
        def test_NoLorem(self):
            driver = self.driver
            driver.get("http://www.python.org")
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
    

【讨论】:

    【解决方案2】:

    我不确定,因为我没有测试过,但我怀疑浏览器仍然是从第一个代码打开的。所以我在这里的建议是在你退出脚本后使用driver.close() 正确终止进程。

    import unittest
    from selenium import webdriver
    driver = webdriver.Chrome('D:\chromedriver\chromedriver.exe')
    driver.get("site URL")
    driver.close()  # Must be there
    

    同样,您可以在测试脚本中进行修改,将self.driver.close()放入tearDown方法中。

    【讨论】:

    • 查看link,可能会有帮助
    • 帮助什么?我没问题:)
    • 想到这里回复的OP。没关系忽略我的cmets。是的,你是对的,它只会一次打开一个。
    【解决方案3】:

    在unittest中,你必须把被测试的代码放在被调用的方法中

    test_<custom_text_here>
    

    此外,我相信您想退出驱动程序而不是单元测试? 换行试试

    unittest.quit()
    

    self.driver.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多