开始Selenium Python自动化测试

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自动化测试)