如何在一个Firefox实例上运行多个测试,SeleniumWebDriver和Python?

如何在一个Firefox实例上运行多个测试,SeleniumWebDriver和Python?,python,python-3.x,selenium,python-unittest,class-method,Python,Python 3.x,Selenium,Python Unittest,Class Method,我正在学习使用SeleniumWebDriver和Python编写自动测试。我在WidgetArea类中有两个测试,我想在Firefox的一个实例中运行它们,我知道我需要指定setUp和tearDown作为@classmethod,但我不知道我还应该改变什么来实现这个目标?代码可在下面找到: import unittest from selenium import webdriver class WidgetArea(unittest.TestCase): @classmethod def

我正在学习使用SeleniumWebDriver和Python编写自动测试。我在
WidgetArea
类中有两个测试,我想在Firefox的一个实例中运行它们,我知道我需要指定
setUp
tearDown
作为
@classmethod
,但我不知道我还应该改变什么来实现这个目标?代码可在下面找到:

import unittest
from selenium import webdriver


class WidgetArea(unittest.TestCase):

@classmethod
def setUp(cls):

    # create new firefox session
    cls.driver = webdriver.Firefox()
    cls.driver.implicitly_wait(30)
    cls.driver.maximize_window()
    # navigate to aplication page
    cls.driver.get("http://demoqa.com/")
    cls.driver.title

def test_widget_area(self):

    elements = self.driver.find_elements_by_xpath("//div[@id='secondary']/aside")
    self.assertEqual(4, len(elements))

def test_widget_list(self):

    elements = self.driver.find_elements_by_xpath("//ul[@id='menu-widget']/li")
    self.assertEqual(7, len(elements))

def test_interaction(self):

    elements = self.driver.find_elements_by_xpath("//ul[@id='menu-interactions']/li")
    self.assertEqual(5, len(elements))

@classmethod
def tearDown(cls):
    cls.driver.quit()

if __name__ == '__main__':
    unittest.main

我不会将
unittests
selenium
一起使用,因此我可以建议在特定框架中进行测试,您可以根据自己的喜好进行调整和更新,尽管
unittests
规则:

from selenium import webdriver

class WidgetArea():

  def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30)
    self.driver.maximize_window()
    self.driver.get("http://demoqa.com/")

  def tearDown(self):
    self.driver.quit()

  def widget_area(self):
    elements = self.driver.find_elements_by_xpath("//div[@id='secondary']/aside")
    try:
        assert len(elements) == 4
        print("Test pass")
    except AssertionError:
        print("Assertion failed")

  def widget_list(self):
    elements = self.driver.find_elements_by_xpath("//ul[@id='menu-widget']/li")
    try:
        assert len(elements) == 7
        print("Test pass")
    except AssertionError:
        print("Assertion failed")

  def interaction(self):
    elements = self.driver.find_elements_by_xpath("//ul[@id='menu-interactions']/li")
    try:
        assert len(elements) == 5
        print("Test pass")
    except AssertionError:
        print("Assertion failed")

  def main(self):
    self.setUp()
    self.widget_area()
    self.widget_list()
    self.interaction()
    self.tearDown()


if __name__ == '__main__':
    new = WidgetArea()
    new.main()

所有断言都将在单浏览器会话期间执行。

使用
selenium
as
unittests
执行自动测试不是强制性的。您可以构建自己的框架并进行调整,就像您想要的一样。Hanks,我一般不熟悉自动测试,在OOP语言中也不熟悉alos,所以我想从一些简单的开始,让start和unittest seams成为不错的选择。据我所知,我想我还远没有开始写我自己的自动框架:)如果这有用,请对这个答案投+1票,如果这解决了你的问题,请接受它,并在回答率下检查,如果这不起作用,请告诉我应该改进什么hi,@Andersson,+1Upvote,我只是为了让它表现出来而降低了声誉,我接受了这个答案。非常感谢,致以最良好的问候