2. 开始
2.1. 简单的使用
假如你已经在Python安装了Selenium,你可以复制如下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()
将以上代码保存在一个py文件中(如python_org_search.py),跟着执行以下的python命令(使用Linux命令或者window用户使用cmd执行以下命令):
python python_org_search.py
2.2. 例子说明
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
接下来,创建Firefox WebDriver的实例。将对象赋予变量driver
driver = webdriver.Firefox()
driver.get("http://www.python.org")
下一行是用assert的方式确认标题是否包含“Python”一词。 (译注:assert 语句将会在之后的语句返回false后抛出异常,详细内容可以自行百度,摘自http://selenium-python-zh.readthedocs.io/en/latest/getting-started.html)
assert "Python" in driver.title
WebDriver 提供大量方法去查询html的元素对象(如find_element_by_*方法)。例如通过input里面的name属性使用find_element_by_name方法去查询。获取其他查询元素的详细说明,我们会在后面的章节中介绍:
elem = driver.find_element_by_name("q")
下面,我们尝试模仿键盘输入数据.一些特殊字符就需要导入selenium.webdriver.common.keys 类.为了安全起见,我们预先使用clear()方法清除控件里面的内容(如:"搜索")这样就不会影响我们查询的结果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
2.3. 使用Selenium写一个测试
Selenium大部分情况下用来写测试案例。Selenium包自身不提供测试工具/框架。你可以使用Python的单元测试模块来写测试案例。py.test 和nose是其它选项的工具/框架。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. 逐步解释案例
import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys
测试类继承了unittest.TestCase,向unittest模块表明,这个类是测试案例:
lass PythonOrgSearch(unittest.TestCase):
def setUp(self): self.driver = webdriver.Firefox()
这是测试方法,而测试方法的命名一般以‘test’作为前缀。在code第一行中,将已经setUp()方法里面被声明的self.driver对象,赋予给driver变量。
def test_search_in_python_org(self): driver = self.driverdriver的get方法的参数,是将要访问的url地址。 WebDriver对等待页面完全被加载之后(换言之,“onload”事件已经被触发)返回控制权给你的测试案例或者脚本。这里要注意的是,假如你的page有很多ajax需要加载,WebDriver可能会无法确认页面什么时候加载完成.:
driver.get("http://www.python.org")
下面一行使用assert断言的方法判断在页面标题中是否包含 “Python”
self.assertIn("Python", driver.title)
WebDriver 提供大量方法去查询html的元素对象(如find_element_by_*方法)。例如通过input里面的name属性使用find_element_by_name方法去查询。获取其他查询元素的详细说明,我们会在后面的章节中介绍:
elem = driver.find_element_by_name("q")
下面,我们尝试模仿键盘输入数据。一些特殊字符就需要导入selenium.webdriver.common.keys 类。:
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
ef tearDown(self): self.driver.close()下面几行是入口函数:
if __name__ == "__main__": unittest.main()
2.5. 使用远程WebDriver
To use the remote WebDriver, you should have Selenium server running. To run the server, use this command:
java -jar selenium-server-standalone-2.x.x.jar
While running the Selenium server, you could see a message looking like this:
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)
所需的功能是一个字典,因此不使用缺省字典,您可以显式地指定这些值:
river = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities={'browserName': 'htmlunit', 'version': '2', 'javascriptEnabled': True})