Selenium自动化测试笔记
层级选择
ActionChains:用于生成用户的行为;所有行为都储存在actionchains对象。
通过perform()执行所有储存行为
定位frame中的元素
switch_to.frame(id\name\index)方法可以把当前定位的主体切换到frame里,用于处理多框架的方法
我们可以从frame的实质去理解:frame实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此菜需要用到switch_to.frame方法去获取frame中嵌入的页面,对那个页面中的元素进行定位。
注意:所有frame必须都使用switch_to.from才可以,不然会报错
对话框处理
很多情况下对话框是一个iframe,处理起来稍微有点麻烦,但现在很多欠框架的对话框是div形式的,这就让我们的处理变得十分简单。
多窗口之间的切换
要想在多个窗口之间切换,首先需要获得每一个窗口的唯一标识符(句柄)。通过获取句柄来区分不同的窗口,从而对不同的窗口进行操作。
所用方法:
- current_window_handle 获取当前窗口句柄
- window_handles 返回所有窗口的句柄到当前会话
- switch_to.window 用于处理多窗口操作的方法
alert/confirm/prompt处理
webdriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。
具体思路是使用switch_to.alert()方法定位到 alert/confirm/prompt,
然后text/accept/dismiss/send_keys 按需进行操作。
- text 返回alert/confirm/prompt中的文字信息
- accept 点击确认按钮
- dismiss 点击取消按钮,如果有的话
- send_keys 输入值,这个alert/confirm没有就不能用了没,不然会报错
下拉框处理
分页处理
上传文件
打开上传文件页面
定位上传按钮,添加本地文件
send_keys()方法不仅可以输入内容外,也可以跟一个本地的文件路径。从而达到上传的目的。
下载文件
webdriver允许我们设置默认的文件下载路径。也就是说自动下载并且存在设置那个目录中。
确定下载文件的Content-Type
Content-Type,内容类型,一般是指网页中存在的Cotent-Type,用于定义网络文件的类型和网页的编码,决定浏览器以什么形式,什么编码读取这个文件。想要下载文件,首先要确定你所要下载的文件的类型。
要识别自动文件的下载类型可以使用curl.
curl是利用URL语法在命令行下工作的开源文件传输工具。
另一种方法是使用requests模块来查找内容类型。Requests是一个Python的HTTP客户端库,默认下载的python环境不包含这个类库,需要另外安装。使用方法如下:
~~~python
import requestsprint (requests.head(“https://www.python.org“).headers[“content-type”])
~~~一旦确定了内容的类型,就可以用它来设置Firefox的默认配置文件,具体实例如下:
~~~python
coding=utf-8
import os
from selenium import webdriverfp = webdriver.FirefoxProfile()
设置成2表示使用自定义下载路径;使用0表示下载到桌面,设置成1表示下载到默认路径
fp.set_preference(“browser.download.folderList”,2)
在开始时是否显示下载管理器
fp.set_preference(“browser.download.manager.showWhenStarting”,False)
fp.set_preference(“browser.download.dir”, os.getcwd())对所给出文件类型不再弹出框进行提问
fp.set_preference(“browser.helperApps.neverAsk.saveToDisk”,
“application/zip”) #下载文件的类型browser = webdriver.Firefox(firefox_profile=fp)
browser.get(“http://sahitest.com/demo/saveAs.htm“)
browser.find_element_by_partial_link_text(“selenium-2”).click()
~~~browser.download.dir 用于指定你所下载文件的目录。
os.getcwd() 该函数不需要传递参数,用于返回当前的目录。
application/octet-stream 为文件的类型。