一、selenium的简单用例
1、要求:
(1)首先用谷歌浏览器打开http://www.python.org网址
(2)输入"pycon”关键字进行搜索并返回搜索结果
(3)查询完成后关闭浏览器
2、代码实现
代码实现前先捕捉一下需要输入框的元素名
实现代码如下:
# -*- coding: utf-8 -*-
"""
@author: lucas
@Function:
@file: python_org_search.py
@time: 2021/8/19 11:06 上午
"""
from selenium import webdriver
# selenium.webdriver 模块提供了所有WebDriver的实现,
# 当前支持的WebDriver有: Firefox, Chrome, IE and Remote。 `Keys`类提供键盘按键的支持,比如:RETURN, F1, ALT等
from selenium.webdriver.common.keys import Keys
# 创建一个Chrome WebDriver的实例
driver = webdriver.Chrome()
# driver.get 方法将打开的URL中填写的地址,WebDriver将等待,直至页面完全加载完毕(其实是等到"onload"方法执行完毕),然后返回
# 继续执行你的脚本,需要注意的是由于页面实用大量的Ajax加载,WebDriver可以不知道何时才能完全加载完毕。
driver.get("http://www.python.org")
# assert方法用于确认标题是否保护"Python"一词
assert "Python" in driver.title
# WebDriver 提供了大量的方法让你去查询页面中的元素,这些方法形如: find_element_by_*。
elem = driver.find_element_by_name("q")
# 为了安全起见,我们先清除input输入框中的任何预填充的文本(例如:”Search”),从而避免我们的搜索结果受影响
elem.clear()
# 我们发送一个关键字"pycon",这个方法的作用类似于你用键盘输入关键字
# 特殊的按键可以使用Keys类来输入,该类继承自 selenium.webdriver.common.keys
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
# 提交页面后,你会得到所有的结果。为了确保某些特定的结果被找到,使用`assert`如下:
assert "No results found." not in driver.page_source
# 关闭浏览器窗口,你还可以使用quit方法代替close方法, quit将关闭整个浏览器,而_close——只会关闭一个标签页,
# 如果你只打开了一个标签页,大多数浏览器的默认行为是关闭浏览器:
driver.close()
二、用Selenium写测试用例
Selenium 通常被用来写一些测试用例. selenium 包本身不提供测试工具或者框架. 你可以使用Python自带的模块unittest写测试用例。
代码如下:
# -*- coding: utf-8 -*-
"""
@author: lucas
@Function:
@file: pythonOrgSearch.py
@time: 2021/8/19 1:11 下午
"""
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 该测试类继承自 unittest.TestCase. 继承 TestCase 类是告诉 unittest 模块该类是一个测试用例:
class PythonOrgSearch(unittest.TestCase):
# setUp 方法是初始化的一部分, 该方法会在该测试类中的每一个测试方法被执行前都执行一遍。
def setUp(self):
# 创建一个Chrome WebDriver的实例
self.driver = webdriver.Chrome()
# 这是一个测试用例实际的测试方法. 测试方法始终以 test`开头。
def test_search_in_python_org(self):
# 在该方法中的第一行创建了一个在 `setUp 方法中创建的驱动程序对象的本地引用。
driver = self.driver
# driver.get 方法将会根据方法中给出的URL地址打开该网站。
# WebDriver 会等待整个页面加载完成(其实是等待”onload”事件执行完毕)之后把控制权交给测试程序
# 如果你的页面使用大量的AJAX技术来加载页面,WebDriver可能不知道什么时候页面已经加载完成:
driver.get("http://www.python.org")
# 使用assert断言的方法判断在页面标题中是否包含 “Python”
self.assertIn("Python", driver.title)
# WebDriver 提供很多方法去查找页面值的元素,这些方法都以 find_element_by_* 开头。 例如:包含 name 属性的input元素可以使用
elem = driver.find_element_by_name("q")
# 接下来我们发送keys,这个和使用键盘输入keys类似。 特殊的按键可以通过引入`selenium.webdriver.common.keys`的 Keys 类来输入
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
# 提交页面之后,无论如何你都会得到搜索结果,为了确保某些结果类检索到,可以使用下列断言
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()
在shell中执行成功后:
注: unittest 模块是基于JAVA JUnit的Python内置的模块。 该模块提供了一个框架去组织测试用例。 selenium.webdriver 模块提供了所有WebDriver的实现。 现在支持的WebDriver有:Firefox, Chrome, IE and Remote. Keys 类提供所有的键盘按键操作,比如像这样的:RETURN, F1, ALT等。
三、使用远程 Selenium WebDriver
1、先下载安装 Selenium 服务器
如果你想使用一个远程的WebDriver,Selenium服务是唯一的依赖,你可以在 该下载页 下载2.x的Selenium server,这个文件大概长成这个样子:selenium-server-standalone-2.x.x.jar, 你可以去下载最新版本的2.x server。
2、为了使用远程 WebDriver, 你应该拥有一个正在运行的 Selenium 服务器。 通过下列命令运行服务器:
java -jar selenium-server-standalone-3.141.0.jar
3、Selenium 服务运行后, 你会看到这样的提示信息:
16:25:28.482 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.0, revision: 2ecb7d9a
16:25:28.602 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444
2021-08-19 16:25:28.723:INFO::main: Logging initialized @757ms to org.seleniumhq.jetty9.util.log.StdErrLog
16:25:29.109 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
16:25:29.233 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
上面一行告诉你,你可以通过这些URL连接到远程WebDriver, 下面是一些例子:
# -*- coding: utf-8 -*-
"""
@author: lucas
@Function:
@file: driver.py
@time: 2021/8/19 4:29 下午
"""
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})