在相同的Firefox实例上按顺序运行Selenium测试

时间:2012-05-09 18:15:01

标签: firefox testing selenium sequential

我正在尝试为拥有论坛的网站设置一些测试。因此,许多这些事情需要连续完成,包括登录,创建和删除线程等。

目前我已经使用Selenium设计了测试用例,并使用webdriver导出到Python。

是否可以在所有测试之间仅使用一个webdriver实例,以便它们可以连续执行?我是python的新手(来自Java)所以我唯一的想法是创建一个实例化webdriver的基类,让所有测试子类化基础,并将webdriver传递给测试。 (我想在Java中这个但是我强迫自己去学习Python)。

或者Selenium内置了另一个功能来完成此任务吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我设法通过拥有一个我的测试子类的基类来实现它。此基类将创建一个静态驱动程序,该驱动程序将由setUp()方法设置一次并返回到以下测试。

from selenium import webdriver
import unittest, time, re

class TestBase(unittest.TestCase):

    driver = None
    rand =  str(random.uniform(1,10))
    base_url = "desiredtestURLhere"

    def setUp(self):
         if (TestBase.driver==None):
            TestBase.driver = webdriver.Firefox()
            TestBase.driver.implicitly_wait(30)
         return TestBase.driver

然后我跑了两个测试...

import unittest, time, re
from testbase import TestBase

class Login(TestBase):

    def test_login(self):
        driver = TestBase.driver
        base_url = TestBase.base_url
        driver.get(base_url)
        # etc

测试#2连续运行......

import random
import unittest, time, re
from testbase import TestBase

class CreateThread(TestBase):

    def test_create_thread(self):
        driver = TestBase.driver
        base_url = TestBase.base_url
        rand = TestBase.rand
        driver.get(base_url + "/forum.php")
        # etc

我的testsuite.py我会跑...

import unittest, sys
# The following imports are my test cases
import login
import create_thread

def suite():
    tsuite = unittest.TestSuite()
    tsuite.addTest(unittest.makeSuite(login.Login))
    tsuite.addTest(unittest.makeSuite(create_thread.CreateThread))
    return tsuite

if __name__ == "__main__":
    result = unittest.TextTestRunner(verbosity=2).run(suite())
    sys.exit(not result.wasSuccessful())

这是我第一次接触Python,所以如果有任何明显的问题,我会很感激。