如何简化Selenium脚本,以便从其他Python脚本运行?

1 投票
1 回答
3542 浏览
提问于 2025-04-16 03:21

我在用selenium的时候遇到了一些麻烦,想把不必要的部分去掉,然后把剩下的打包成可以在其他脚本中调用的形式。我对这个过程有点搞不清楚,特别是那些单元测试的部分是怎么来的……理想情况下,我希望能把这些分离成一个函数,这样我就可以直接调用了。谢谢大家的建议。

(还有,是的,我确实需要用selenium,所以请不要建议其他工具,因为我会用selenium做很多事情,我需要搞明白这个问题。)

这是一个基本的演示脚本:

from selenium import selenium

import unittest



class TestGoogle(unittest.TestCase):

    def setUp(self):

        self.selenium = selenium("localhost", \

            4444, "*firefox", "http://www.bing.com")

        self.selenium.start()



    def test_google(self):

        sel = self.selenium

        sel.open("http://www.google.com/webhp")

        sel.type("q", "hello world")

        sel.click("btnG")

        sel.wait_for_page_to_load(5000)

        self.assertEqual("hello world - Google Search", sel.get_title())



    def tearDown(self):

        self.selenium.stop()



if __name__ == "__main__":

    unittest.main()

1 个回答

1

我建议你在其他脚本中创建一些函数,这些函数可以接收一个测试用例的引用作为参数。这样,如果出现问题,你的函数就可以让测试用例失败。比如说,下面这个是用来在谷歌搜索一个字符串并检查标题的:

def search_s(utest, in_str):
  s = utest.selenium
  s.type('q', in_str)
  s.click('btnG')
  s.wait_for_page_to_load('30000')
  utest.assertEqual("%s - Google Search" % (in_str,), s.get_title())

然后,在你的测试用例中,可以这样调用它:

def test_google(self):
  s.open('/')
  search_s(self, "hello world")

你可以把这些方法做成库,这样就可以灵活组合你的测试部分。

撰写回答