2

我正在尝试为具有论坛的网站设置一些测试。因此,其中很多事情都需要依次完成,包括登录、创建和删除线程等。

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

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

还是 Selenium 中内置的另一个功能可以实现这一点?

谢谢你的时间。

4

1 回答 1

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,所以如果有任何明显的问题,我会很感激反馈。

于 2012-05-10T17:01:35.750 回答