尝试将Selenium IDE Python脚本作为test sui运行

2024-04-26 21:53:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在运行由seleniumidepython远程控制插件格式化程序导出的多个Python测试脚本时,我遇到了几个问题。在

1)python脚本完成后,浏览器窗口将自动关闭。例如,我在Firefox中运行测试。在

2)Selenium不能用python导出它的测试套件。如何在python中复制测试套件功能?在

我之所以花时间在Python中运行测试脚本,是因为我们的测试用例解决方案(Testuff)软件允许API调用更新通过Selenium测试用例自动化运行的相邻测试用例。在

下面是一个包含API调用的代码示例。在

谢谢。在

from selenium import selenium
import unittest, time, re

class python_script(unittest.TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://test website url/")
        self.selenium.start()

    def test_python_script(self):
        sel = self.selenium
from selenium import selenium
import unittest, time, re, urllib

class python_script(unittest.TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://test website url/")
        self.selenium.start()


    def test_python_script(self):
        sel = self.selenium
        sel.open("http://192.168.48.23/labmatrix")
        for i in range(60):
            try:
                if sel.is_element_present("//*[@name='username']"):
                    break
            except: pass
            #time.sleep(1)
        else:
            fields = {"test_id" : "testuff test_id number","status" : "failed"}
            result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
            print result.read()
            self.fail("time out")
        sel.type("//*[@name='username']", "username")
        for i in range(60):
            try:
                if sel.is_element_present("//*[@name='password']"): break
            except: pass
            #time.sleep(1)
        else:
            fields = {"test_id" : "testuff test_id number","status" : "failed"}
            result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
            print result.read()
            #self.fail("time out")
        sel.type("//*[@name='password']", "password")
        for i in range(60):
            try:
                if sel.is_element_present("//*[@id='submitButton']"): break
            except: pass
            #time.sleep(1)
        else:
            fields = {"test_id" : "testuff test_id number","status" : "failed"}
            result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
            print result.read()
            self.fail("time out")
        sel.click("//*[@id='submitButton']")
        #time.sleep(0.1)
        for i in range(60):
            try:
                if sel.is_element_present("//*[@id='loadingDeck'][@selectedIndex='1']"):
                    fields = {"test_id" : "testuff test_id number","status" : "passed"}
                    result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
                    print result.read()
                    break
            except: pass
            #time.sleep(1)
        else:
            self.fail("time out")

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

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

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

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

谢谢你的快速反应。我用以下代码尝试了jcfollower的建议:

^{pr2}$

…不幸的是,浏览器窗口仍然关闭。还有其他建议吗?在

谢谢。在


让它部分工作。在

删除其中一个:

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

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

…并移除了:

        self.selenium.stop()

从剩余的“if __name__”语句和python日志以及浏览器窗口保持打开状态。这是正确的一步,但我需要在脚本运行完成后关闭日志窗口。在

我猜下一步是创建另一个stop类并在硒.py文件一点,看看我能不能删除关闭浏览器的命令。在

如果有人有任何其他建议,将不胜感激。在


Tags: nametestselfidurlfieldsiftime
2条回答

firefox每次重新启动的原因是在调用每个单元测试函数之前调用setUp(类似地,在调用之后调用tearDown)。因此,单元测试只是为每个测试创建一个新的selenium浏览器实例。不过,这不一定是坏事,但重复使用同一个浏览器会话可能会更快。在

为了克服这个问题,可以使用setUpClass/tearDownClass类方法,如下所示:

class python_script(unittest.TestCase):
    @classmethod
    def setUpClass(cls)
        cls.selenium = selenium("localhost", 4444, "*chrome", "http://test website url/")
        cls.selenium.start()

    def setUp(self):
        self.verificationErrors = []

    def test_python_script_1(self):
        ...

    def test_python_script_2(self):
        ...

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

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

请注意,setUpClass和tearDownClass只在Python2.7中引入!如果您使用的是旧版本的python,您仍然可以使用它,但是您必须安装一个名为unittest2的库。安装后,只需将脚本顶部的导入行更改为类似

^{pr2}$

如果删除第二组import语句、第二组Class语句和第二个setUp函数,然后重命名test_python_脚本函数,使它们的末尾有_1和_2,是否有效。在

相关问题 更多 >