gpt4 book ai didi

python - 在不指定配置文件的情况下保持 Firefox 配置文件在多个 Selenium 测试中持久

转载 作者:太空狗 更新时间:2023-10-30 01:30:26 25 4
gpt4 key购买 nike

努力实现:

  • 在整个测试中使用相同的 firefox 配置文件

问题:

  • 测试分布在 30 个不同的文件中,实例化一个 selenium 对象,从而创建一个 firefox 配置文件,在第一个测试中不会持续到以下测试,因为一旦脚本结束 IIRC,对象就会死亡

  • 无法指定配置文件,因为我正在编写一个应该在不同机器上运行的测试套件

可能的解决方案:

  • 在一些通用代码中创建一个 selenium 对象,该对象在整个测试过程中都保留在内存中。我通过生成一个新的 python 进程并等待它结束来运行每个测试。我不确定如何将内存中的对象发送到新的 Python 对象。

感谢任何帮助,谢谢。

编辑:只是想到不是生成子 python 进程来运行测试,我只是实例化 selenium IDE 生成的测试类,删除所有 30 个测试中的 setUp 和 tearDown 方法,在开始时实例化一个 selenium 对象,然后将所述 Selenium 对象传递给每个实例化的测试。

最佳答案

我遇到了同样的问题,并且还注意到在测试中保持单个 Firefox session 大大加快了测试套件的性能。

我所做的是为我的 Selenium 测试创建一个基类,它只会在 Firefox 尚未启动时激活它。在拆卸期间,此类不会关闭 Firefox。然后,我在导入所有测试的单独文件中创建了一个测试套件。当我想一起运行所有测试时,我只执行测试套件。在测试套件结束时,Firefox 自动关闭。

这是基本测试类的代码:

from selenium.selenium import selenium
import unittest, time, re
import BRConfig

class BRTestCase(unittest.TestCase):
selenium = None

@classmethod
def getSelenium(cls):
if (None == cls.selenium):
cls.selenium = selenium("localhost", 4444, "*chrome", BRConfig.WEBROOT)
cls.selenium.start()
return cls.selenium

@classmethod
def restartSelenium(cls):
cls.selenium.stop()
cls.selenium.start()

@classmethod
def stopSelenium(cls):
cls.selenium.stop()

def setUp(self):
self.verificationErrors = []
self.selenium = BRTestCase.getSelenium()

def tearDown(self):
self.assertEqual([], self.verificationErrors)

这是测试套件:

import unittest, sys
import BRConfig, BRTestCase

# The following imports are my test cases
import exception_on_signup
import timezone_error_on_checkout
import ...

def suite():
return unittest.TestSuite((\
unittest.makeSuite(exception_on_signup.ExceptionOnSignup),
unittest.makeSuite(timezone_error_on_checkout.TimezoneErrorOnCheckout),
...
))

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

这样做的一个缺点是,如果您只是从命令行运行一个测试,Firefox 不会自动关闭。然而,我通常将所有测试一起运行,作为将我的代码推送到 Github 的一部分,因此解决这个问题并不是我的首要任务。

这是在该系统中运行的单个测试的示例:

from selenium.selenium import selenium
import unittest, time, re
import BRConfig
from BRTestCase import BRTestCase

class Signin(BRTestCase):
def test_signin(self):
sel = self.selenium
sel.open("/signout")
sel.open("/")
sel.open("signin")
sel.type("email", "test@test.com")
sel.type("password", "test")
sel.click("//div[@id='signInControl']/form/input[@type='submit']")
sel.wait_for_page_to_load("30000")
self.assertEqual(BRConfig.WEBROOT, sel.get_location())

if __name__ == "__main__":
unittest.main()

关于python - 在不指定配置文件的情况下保持 Firefox 配置文件在多个 Selenium 测试中持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com