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
您运行的python应该安装selenium模块。
2.2。示例说明
该selenium.webdriver模块提供了所有的webdriver实现。目前支持的WebDriver实现是Firefox,Chrome,IE和Remote。该键类提供键在键盘像RETURN,F1,ALT等。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
接下来,创建Firefox WebDriver的实例。
driver = webdriver.Firefox()
该driver.get方法将定位在给定的URL的网页。在将控件返回到测试或脚本之前,WebDriver将等待页面完全加载(即“onload”事件已触发)。值得注意的是,如果你的页面在加载时使用了大量的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类 发送特殊键。为安全起见,我们首先清除输入字段中的任何预先填充的文本(例如“搜索”),这样就不会影响我们的搜索结果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
提交页面后,如果有结果,您应该得到结果。为确保找到一些结果,请断言:
assert "No results found." not in driver.page_source
最后,浏览器窗口关闭。您也可以调用quit 方法而不是close。该退出将退出整个浏览器,而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。完成示例
最初,导入所需的所有基本模块。该单元测试模块是内置Python基于Java的JUnit。该模块提供了组织测试用例的框架。该selenium.webdriver模块提供了所有的webdriver实现。目前支持的WebDriver实现是Firefox,Chrome,Ie和Remote。该键类提供键在键盘像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是初始化的一部分,此方法将你要在这个测试用例类写的每一个测试函数之前被调用。在这里,您将创建Firefox WebDriver的实例。
def setUp(self):
self.driver = webdriver.Firefox()
这是测试用例方法。测试用例方法应始终以字符测试开始。此方法中的第一行创建对setUp方法中创建的驱动程序对象的本地引用。
def test_search_in_python_org(self):
driver = self.driver
该driver.get方法将定位在给定的URL的网页。在将控件返回到测试或脚本之前,WebDriver将等待页面完全加载(即“onload”事件已触发)。值得注意的是,如果你的页面在加载时使用了大量的AJAX,那么WebDriver可能不知道它何时完全加载:
driver.get("http://www.python.org")
下一行是断言,确认标题中有“Python”字样:
self.assertIn("Python", driver.title)
WebDriver提供了许多使用find_element_by_ *方法查找元素的 方法。例如,可以使用find_element_by_name 方法通过其name属性定位输入文本元素。有关查找元素的详细说明,请参阅“ 定位元素”一章:
elem = driver.find_element_by_name("q")
接下来,我们发送密钥,这类似于使用键盘输入密钥。可以使用从selenium.webdriver.common.keys导入的Keys类 发送特殊键:
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
提交页面后,如果有的话,您应该按照搜索结果获得结果。为确保找到一些结果,请断言:
assert "No results found." not in driver.page_source
该拆卸方法将每个测试方法之后被调用。这是一个执行所有清理操作的地方。在当前方法中,浏览器窗口关闭。您也可以调用quit方法而不是 close。该退出将退出整个浏览器,而关闭 将关闭一个标签,但如果它是唯一选项卡中打开,默认情况下大多数浏览器将完全退出:
def tearDown(self):
self.driver.close()
最后一行是运行测试套件的一些样板代码:
if __name__ == "__main__":
unittest.main()
2.5。使用Selenium远程的webdriver
要使用远程WebDriver,您应该运行Selenium服务器。要运行服务器,请使用以下命令:
java -jar selenium-server-standalone-2.x.x.jar
在运行Selenium服务器时,您可以看到如下所示的消息:
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)
所需的功能是字典,因此您可以显式指定值,而不是使用默认字典:
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={'browserName': 'htmlunit',
'version': '2',
'javascriptEnabled': True})