[译]SeleniumPython⽂档:⼆、初步开始
2.1.简单使⽤
如果已经安装好了Selenium Python,你就可以像下⾯这样编写Python代码来使⽤它了:
from selenium import webdriver
from selenium.webdrivermon.keys import Keys
driver = webdriver.Firefox()
<("")
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已经正确安装了selenium模块):
$python python_org_search.py
2.2.⽰例讲解
selenium.webdriver模块提供了所有的WebDriver实现。当前Selenium⽀持的WebDriver实现由⽕狐、Chrome、IE和远程。Keys类提供了键盘按键的键值,如RETURN、F1、ALT等。from selenium import webdriver
from selenium.webdrivermon.keys import Keys
接着,Firefox WebDriver实例被创建:
driver = webdriver.Firefox()
<⽅法根据给定的URL访问Web 页⾯。在将控制权交给你的测试脚本之前,WebDriver将会等待页⾯完全加载(也就是说,等待onload事件被触发)。值得注意的是如果你的页⾯在加载的时候使⽤了⼤量的AJAX,WebDriver有可能不知道它是否已经加载完成:
<("")
接下来的⼀⾏是⼀个断⾔,⽤来确保标题中有“Python”这个单词:
assert "Python" in driver.title
WebDriver为寻页⾯元素提供了⼤量⽅法,他们都是find_element_by_*的形式。举个例⼦,input text元素可以根据他的name值使⽤find_element_by_name来进⾏定位。在后续的元素定位那⼀章将会对元素定位做更为详细的介绍。
elem = driver.find_element_by_name("q")
接下来我们发送了⼀个“按键”值,这和你使⽤键盘的输⼊⾮常相似。特殊案件可以通过从selenium.webdrivermon.keys导⼊的Keys类进⾏发送。安全起见,我们⾸先清除输⼊框中的预置⽂本(⽐如,“搜索”,"Serach")。以保证它不会影响我们的搜索结果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)#Keys.ENTER
在页⾯提交之后,你应该会得到相应的搜索结果。为了保证⼀些结果被到,作⼀个断⾔:
assert "No results found." not in driver.page_source
最后,关闭浏览器窗⼝。你也可以调⽤quit来代替close⽅法。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.webdrivermon.keys import Keys
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_search_in_python_org(self):
driver = self.driver
<("")
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()
你可以从命令⾏来运⾏上⾯的测试样例,如:
python test_python_org_search.py
.
-
---------------------------------------------------------------------
Ran 1 test in 15.566s
OK
上⾯的结果表明测试已经成功完成。
2.4.通览⽰例
⾸先,加载所有需要的基础模块。是基于Java JUnit的Python⾃建模块。该模块提供了组织测试样例的框架。selenium.driver模块提供了所有的WebDriver实现。当前⽀持的WebDriver实现有:⽕狐、Chrome、IE和远程。类提供了键盘按键的键值,如RETURN、F1、ALT等。
import unittest
from selenium import webdriver
from selenium.webdrivermon.keys import Keys
test case类继承⾃unittest.TestCase。从TestCase进⾏继承会告诉unittest模块这是⼀个测试样例:
class PythonOrgSearch(unittest.TestCase):
setUp⽤来进⾏初始化,在测试样例类中编写的所有测试函数执⾏之前被调⽤。在这⾥,我们创建了⼀个Firefox(⽕狐)WebDriver的实例:
def setUp(self):
self.driver = webdriver.Firefox()
下⾯是⼀个测试样例⽅法。测试样例⽅法⼀般应⾸先进⾏字符测试。该函数中的第⼀⾏创建了⼀个本地引⽤,引⽤的是在setUp中创建的driver对象:
def test_search_in_python_org(self):
driver = self.driver
<⽅法根据给定的URL访问Web 页⾯。在将控制权交给你的测试或者脚本之前,WebDriver将会等待页⾯完全加载(也就是说,等待onload事件被触发)。值得注意的是如果你的页⾯在加载的时候使⽤了⼤量的AJAX,WebDriver有可能不知道它是否已经加载完成:
<("")
接下来的⼀⾏是⼀个断⾔,⽤来确保标题中有“Python”这个单词:
self.assertIn("Python" ,driver.title)
WebDriver为定位页⾯元素提供了⼤量⽅法,他们都是find_element_by_*的形式。举个例⼦,input text元素可以根据他的name值使⽤find_element_by_name定位。在后续的元素定位那⼀章将会对元素定位做更为详细的介绍。
elem = driver.find_element_by_name("q")
接下来我们发送了⼀个“按键”值,这和你使⽤键盘的输⼊⾮常相似。特殊案件可以通过从selenium.webdrivermon.keys导⼊的Keys类进⾏发送。安全起见,我们⾸先清除输⼊框中的预置⽂本(⽐如,“搜索”,"Serach")。以保证它不会影响我们的搜索结果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)#Keys.ENTER
在页⾯提交之后,你应该会得到相应的搜索结果。为了保证⼀些结果被到,作⼀个断⾔:
assert "No results found." not in driver.page_source
tearDown⽅法将会在所有的测试⽅法执⾏之后调⽤。此函数⽤来做⼀些清理⼯作。在当前⽅法中,清理⼯作是关闭浏览器。你也可以调⽤quit⽅法来代替close⽅法。quit将会关闭整个浏览器,⽽close将会仅关闭⼀个标签页。如果只打开了⼀个标签页的话,⼤多数浏览器默认会关闭整个浏览器:
def tearDown(self):
self.driver.close()
最后⼀⾏⽤来运⾏测试套件:
if __name__ == "__main__":
unittest.main()
2.5.通过远程WebDriver使⽤Selenium
要使⽤远程WebDriver,你应该先运⾏Selenium server。可以使⽤下⾯的命令启动它:
java -jar
Selenium server启动之后你可以看到像下⾯的⼀条消息:
15:43:07.541 INFO - RemoteWebDriver instances should connect to: 127.0.0.1:4444/wd/hub
上⾯那⾏说明你可以使⽤这个URL来连接远程WebDriver。这⾥是⼀些⽰例:
from selenium import webdriver
from selenium.webdrivermon.desired_capabilities import DesiredCapabilities driver = webdriver.Remote(
command_executor='127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver = webdriver.Remote(
command_executor='127.0.0.1:4444/wd/hub',
selenium怎么使用desired_capabilities=DesiredCapabilities.OPERA)
driver = webdriver.Remote(
command_executor='127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)
desired capabilities是⼀个字典,要替换字典中默认键值的话,你可以显式指定对应的值:driver = webdriver.Remote(
command_executor='127.0.0.1:4444/wd/hub',
desired_capabilities={'browserName': 'htmlunit',
'version': '2',
'javascriptEnabled': True})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论