今天我需要完成一个从web界面创建大量数据的任务,我很自然的想到了使用Selenium,而我又不想使用Java调用Selenium,原因是使用Java需要编译的过程,比较麻烦。我看到Selenium IDE里面有python, groovy等语言的选项,可见Selenium是支持这些脚本语言的。因此我打算试试。
我花了不少时间google如何使用python或者groovy来调用Selenium,最终找到了完美的方法。具体如下:
1.首先从Selenium官方网站下载Selenium RC 1.0.3。
2.解压缩该文件,进入“selenium-python-client-driver-1.0.1”子目录。该目录下的“selenium.py”是Selenium客户端的python实现。该目录下其他的几个“test_*.py”文件是几个脚本实例。比如“test_google.py”脚本就是控制Selenium打开浏览器进入google并search “hello world”,按照这些实例可以很容易的写出类似的python脚本。
创建测试脚本还有更简单的方法:就是使用Selenium IDE进行脚本的录制。这是一个firefox的插件,使用很简单,记得录制好脚本之后选择python语言,其它不再赘述。
当脚本写好之后,运行之前要做的事情是启动Selenium server。打开一个终端,进入步骤2解压缩之后的“selenium-server-1.0.3”子目录,运行:
1
| java -jar selenium-server.jar
|
如果要用指定端口替代默认端口4444,则:
1
| java -jar selenium-server.jar -port 14444
|
即可运行Selenium server,保持该终端处于运行状态。
- 使用python运行你写好的脚本,比如:
1
| python create_customer.py
|
如果一切正常,这时你应该看到Selenium会打开浏览器窗口,开始做你在脚本中指定的操作。
如果你想让脚本控制的操作与录制的操作有所不同,改动脚本也很方便:比如录制的脚本做的是创建一条数据,而我想创建多条,则在脚本中加上一个循环;如果想让脚本中插入的多条数据各不相同,则在脚本的循环中修改输入的内容使之有所区别。我喜欢的是,这样的修改保存之后即可运行,不需要编译的繁琐过程。这充分体现了脚本语言的优势,呵呵……
Enjoy!
以下是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| from selenium import selenium import unittest, time, re
class create_incident(unittest.TestCase): def setUp(self): self.verificationErrors = [] self.selenium = selenium("localhost", 14444, "*firefox", "http://localhost:8080/") self.selenium.start()
def test_create_incident(self): sel = self.selenium sel.delete_all_visible_cookies() sel.window_maximize() sel.open("/login.xhtml") sel.wait_for_page_to_load("30000") self.assertEqual("Oracle Mission Critical Support Platform", sel.get_title()) sel.type("loginform:username", "user01.hmt@gmail.com") sel.type("loginform:password", "humito01") sel.click("loginform:button") sel.wait_for_page_to_load("30000") for i in range(31, 45): sel.open("/im/add_im_ticket.xhtml") sel.wait_for_page_to_load("30000") self.assertEqual("Create IM Ticket", sel.get_title()) sel.select("create_ticket_form_id:orgSelector", "label=im_cust_11") sel.select("create_ticket_form_id:ownerSelector", "label=user06 hmt") sel.click("//option[@value='68']") sel.select("create_ticket_form_id:severitySelector", "label=3") sel.type("create_ticket_form_id:summary", "test_max_0429_%03d" % i) sel.type("create_ticket_form_id:description", "test") sel.click("create_ticket_form_id:submitButtonBottom") sel.wait_for_page_to_load("30000") self.assertEqual("View IM Ticket", sel.get_title())
def tearDown(self): self.selenium.stop() self.assertEqual([], self.verificationErrors)
if __name__ == "__main__": unittest.main()
|