我正在尝试为拥有论坛的网站设置一些测试。因此,其中许多事情需要连续完成,包括登录、创建和删除线程等。
目前我已经使用 Selenium 设计了测试用例,并使用 webdriver 导出到 Python。
是否可以在所有测试之间只使用一个 webdriver 实例,以便它们可以连续执行?我是 python 的新手(来自 Java),所以我唯一的想法是创建一个基类来实例化 webdriver,让所有测试子类化基类,并将 webdriver 传递给测试。 (我只想用 Java 做,但我强制自己学习一些 Python)。
或者 Selenium 中是否有其他内置功能可以实现此目的?
感谢您的宝贵时间。
最佳答案
我设法通过让我的测试子类化的基类来让它工作。这个基类将创建一个静态驱动程序,该驱动程序将通过 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,所以如果有任何明显的问题,我将不胜感激。
关于firefox - 在同一个 Firefox 实例上顺序运行 Selenium 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521775/