2.1 简单的例子
如果你安装了Selenium的Python工具包,你可以通过Python来使用它。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
把上面的代码保存到文件(例如:python_org_search.py), 可以通过命令来运行它:
python python_org_search.py
在运行上面的代码之前确保selenium模块已经安装。
2.2 例子详解
selenium.webdriver模块提供所有的WebDriver实现,现在支持的WebDriver实现有Firefox,Chrome,IE和远程执行,keys类支持键盘键例如:回车,F1, ALT等等。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
下面,创建一个Firefox的WebDriver实例。
driver = webdriver.Firefox()
driver.get方法像浏览器那样访问url,WebDriver会等整个页面下载完才把控制权交回给测试脚本,如果你的页面用了很多ajax那么WebDriver可能不知道什么时候加载完成。
driver.get("http://www.python.org")
下面是一个断言来确认标题里面有"Python"字符:
assert "Python" in driver.title
WebDriver提供了很多像find_element_by_*的方法来查找元素,例如,可以使用find_element_by_name方法通过其name属性来定位输入文本元素。
elem = driver.find_element_by_name("q")
接下来,我们发送按键,这类似于使用键盘输入按键。可以使用从selenium.webdriver.common.keys导入的keys类来发送特殊的键。为了安全起见,我们将首先清除输入字段(如“Search”)中任何预先填充的文本,这样它就不会影响我们的搜索结果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
提交页面后,如果有结果,应该得到结果。为了确保找到某些结果,请作出以下断言:
assert "No results found." not in driver.page_source
最后,关闭浏览器窗口。您也可以调用quit方法而不是close。“退出”将退出整个浏览器,而“关闭”将关闭一个标签,但如果只有一个标签被打开,默认情况下大多数浏览器将完全退出。
driver.close()
2.3 使用Selenium编写测试脚本
Selenium主要用于编写测试用例。selenium本身并不提供测试工具/框架。您可以使用Python的unittest模块编写测试用例。其他可选的工具/框架是py.test和nose。
在本章中,我们使用unittest作为选择框架。下面是使用unittest模块修改的示例。这是一个测试python.org搜索功能的例子:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_search_in_python_org(self):
driver = self.driver
driver.get("http://www.python.org")
self.assertIn("Python", driver.title)
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
你可以在shell中执行上面的测试用例
python test_python_org_search.py
.
----------------------------------------------------------------------
Ran 1 test in 15.566s
OK
上面的结果表示测试用例执行完成。
2.4 看一下例子
首先要导入基础的模块,unittest是居于java的JUnit并且内置于Python,这个模块提供了测试用例的框架,selenium.webdriver模块提供所有的webdriver实现。目前支持webdriver实现的有
Firefox, Chrome, Ie和远程调用,Keys类在键盘中提供诸如RETURN、F1、ALT等键。
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
测试用例类继承于unittest.TestCase,继承TestCase类着可以可以告诉unittest模块这是一个测试用例。
class PythonOrgSearch(unittest.TestCase):
setUp是初始化方法,这个方法将会在测试用例里首先被调用,创建一个WebDriver的Firefox实例。
这里是测试用例的方法,测试用例方法名总是以test开头,方法的第一行创建一个在setUp方法创建的driver对象的本地引用。
def test_search_in_python_org(self):
driver = self.driver
最后是运行测试用例的程序入口
if __name__ == "__main__":
unittest.main()
2.5 使用Selenium的远程WebDriver
使用远程WebDriver, 你必须运行Selenium server, 下面是运行命令。
java -jar selenium-server-standalone-2.x.x.jar
当你启动Selenium server后,可以看到类似下面的信息。
15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
上面的信息是说你可以用这个url去链接远程WebDriver,下面是例子。
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.OPERA)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)
desired_capabilities是一个字典,你可以指定字典的值,而不是用缺省的字典。
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={'browserName': 'htmlunit',
'version': '2',
'javascriptEnabled': True})
开始Selenium Python自动化测试
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 摘要: 之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都...
- 一.selenium + python自动化测试环境搭建 1.下载pip 【python的安装包管理工具】 2.下...