browser.fill('user', 'hhtxwd')
在Selenium中, 等效代码会是:
element= browser.find_element.by_name('user')element.send_keys('hhtxwd')
因为Splinter是一个抽象化层面, 它支持多种抽象化后端。
splinter特性
1、可以模拟浏览器行为,访问指定的URL,并且可以指定不同的浏览器类型。比如firefox或者chrome等,只需要下载对应浏览器驱动;
2、支持cookie操作,可以很方便的添加和删除cookie;
3、支持模拟鼠标的动作;
4、支持模拟键盘的输入操作,对input等控件的输入可以模拟用户的type过程。
5、支持直接运行js或者调用页面的js。
6、支持模拟上传文件。
7、对radio和checkbox有专门的api支持,非常方便;
8、支持快速的获取页面的元素或者判断是否存在文本,用于开发判断页面提示信息是否准确非常方便。
9、最重要的,splinter的API非常简单,配合官方的文档学习成本几乎是0,当然你得懂一些python语法。如果你比较了解js和css,你可能会像喜欢jquery一样喜欢它;
举个简单例子
import timefrom splinter import Browser#splineter默认是firefox driver,需要指定加参数,如chromewith Browser('chrome') as browser: # 访问 URL url = "https://www.baidu.com" browser.visit(url) browser.fill('wd', 'splinter - python acceptance testing for web applications') # 找到并点击搜索按钮 button = browser.find_by_xpath('//input[@type="submit"]') # 与元素交互 button.click() time.sleep(3) if browser.is_text_present('splinter.readthedocs'): print ("Yes, the official website was found!") else: print ("No, it wasn't found... We need to improve our SEO techniques")
如果
Browser不
指定driver, 那么会默认使用 Firefox;
演示效果如下:
代码是不是十分的简单和清晰呢?下面我们就来介绍下spliner的使用吧
一、安装
前提已经安装python环境,演示使用python3.6
pip install splinter
依赖安装
pip install selenium
安装对应驱动(本文演示以chrome为例):
chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
备用: http://npm.taobao.org/mirrors/chromedriver/
firefox浏览器驱动: https://github.com/mozilla/geckodriver/releases
chrome浏览器与driver版本需要一致,以免出现无法启动的情况
驱动存放位置
驱动下载完成后,放在python安装目录的scripts文件夹目录,如截图所示
二、快速上手 浏览器 :需要使用splinter时,首先需要创建Browser实例,指定driver为chrome,且支持headless无头模式from splinter import Browserbrowser = Browser(driver_name='chrome',headless=True)
访问链接
:使用visit方法
browser.visit('https://baidu.com')
输入搜索关键字
:页面加载完毕后,你能进行一系列的交互,比如点击,输入框填充字段使用
fill
,选择单选按钮和复选框。让我们在百度搜索框中
搜索
splinter - python
browser.fill('wd', 'splinter - python')
点击搜索按钮
通过以下操作找到百度搜索按钮:button = browser.find_by_xpath('//input[@type="submit"]')
指定Splinter 哪一个按钮需要点击。这个button任意其他元素 - 可以通过它的css, xpath, id, tag 或 name来识别,比如:
browser.find_by_css('h1')browser.find_by_xpath('//h1')browser.find_by_tag('h1')browser.find_by_name('name')browser.find_by_text('HelloWorld!')browser.find_by_id('first')browser.find_by_value('value_name')
除此以外,还支持按照链接查找,如:
links_1 = browser.find_link_by_text('Link文字')links_2 = browser.find_link_by_partial_text('link文字部分')links_3 = browser.find_link_by_href('http://www.baidu.com')links_4 = browser.find_link_by_partial_href('baidu')
查找方法是可链式的,因此可以找到先前发现的元素,然后再找后续属性
div = browser.find_by_tag("div")with_elements = divs.first.find_by_name("name")
上述查找页面元素的方法会返回一个已找到元素list,如果需要获取指定的值,可以使用如下方法:
first_ = browser.find_by_name('name').first #返回已找到元素的第一个last_ = browser.find_by_name('name').last #返回已找到元素的最后一个index_found = browser.find_by_name('name')[1] #直接通过索引值获取
找到搜索按钮后,我们就可以使用click()进行点击操作:
browser.find_by_xpath('//input[@type="submit"]').click()
验证内容:页面出现搜素结果后,可以使用browser对应方法验证页面内容,例如:
browser.title #验证页面titlebrowser.html #验证页面内容browser.url #验证页面urlbrowser.is_text_present('splinter') #验证是否存在对应textbrowser.is_text_not_present('splinter') #验证是否不存在对应text
关闭浏览器:
结束测试后,使用 browser.quit
关闭浏览器:
browser.quit()
其他支持的操作包括:
鼠标交互
页面元素与表单交互
检测文本和元素是否存在页面
cookies操作
处理HTTP状态码
异常处理
iframes,alert等交互操作
js调用
splinter中文文档
https://splinter-docs-zh-cn.readthedocs.io/zh/latest/
splinter PIYP
https://www.cnpython.com/pypi/splinter