我爱编程

Selenium+python安装及测试

2018-06-27  本文已影响42人  Kaami

本文参考《Selenium2 python自动化测试》一书的第二章,主要解决安装及测试过程中存在的若干问题。

安装

1、首先,按照书中提供的安装步骤,依次安装python2.7、setuptools、pip,并设置好相关的环境变量。

a、python2.7可从官网下载msi安装包进行安装,安装完将C:\python27C:\python27\Scripts添加进环境变量的path中。(此处默认安装在C盘根目录,如安装在其他目录请做相应修改)打开cmd,输入python,回车。若进入python环境(即出现符号<<<),则说明python安装成功。

b、从https://pypi.python.org/pypi/pip上下载pip,解压。打开cmd窗口,cd进入解压目录,输入python setup.py install,回车完成安装。

c、安装setuptoolscmd下输入python -m pip install -U setuptools,回车完成安装。

2、安装selenium

打开cmd,输入 pip install -U selenium,回车。自动完成selenium的下载和安装,安装完成后可在C:\python27\Lib\site-packages里找到selenium的源码包位置。

selenium简单测试

打开pythonGUI界面IDLE(如安装了eclipse+pydev或其他pythonIDE环境,可以在其上开发代码),输入以下代码,代码的具体解析见书中。


#! /usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()

browser.quit()

运行时若出现找不到firefox webdriver路径的错误,下载geckodriver.exe,放到C:\Python27目录下即可。若出现以下错误:

selenium.common.exceptions.WebDriverException: Message: Unsupported Marionette protocol version 2, required 3

升级到最新的Firefox版本即可。

将代码中的Firefox改成其他浏览器如IEChrome等,需要下载对应的浏览器驱动,并指定好路径。

IE需要下载IEDriverServer.exe,并关闭浏览器的安全设置,并在浏览器的工具->Internet选项->安全里将Internet、本地Internet、可信站点、受限站点下的启用保护模式前的勾去掉。

Chrome需要下载chromedriver.exe,测试无误。

关于python的webdriver API

webdriver原理:

1. WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driverremote server

2. Client端通过CommandExcuter 发送HTTPRequestremote server的侦听端口(通信协议: the webriver wire protocol

3. Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll, chromedriver.exe),来转化转化浏览器的native调用。

webdriver api提供了web上的各种操作和分析。

1、对象(元素)定位

对象(元素)定位和操作是自动化测试的核心,其中操作又是建立在定位的基础上。webdriver 提供了一系列的定位手 段,包括

对应的webdriver里的函数分别为

idname是比较常用的定位方式。xpath定位可以借助Firefox浏览器的firebugfirepath插件,ChromeIE自带开发者工具。

2、定位一组元素: 通过for循环实现

3、层级定位 : 通过父元素定位子孙元素

4、对象操作

关于WebElement

5、多层框架(frame)和窗口(window)的定位

元素在frame中时,定位不到。使用driver.switch_to_frame("frame_name")之后,再进行定位

对于window,同样可以采用driver.switch_to_window("window_name")

driver.implicitly_wait(30)可以替代time.sleep(30)

6、调用js方法

driver.execute_script('document.title')

作用:在当前窗口/框架同步执行JavaScript脚本

7、上传文件

定位上传按钮,通send_keys添加本地文件路径就可以了

示例代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
import os,time

driver = webdriver.Firefox()
driver.get("http://m.mail.10086.cn")
driver.implicitly_wait(30)

#登录
driver.find_element_by_id("ur").send_keys("手机号")
driver.find_element_by_id("pw").send_keys("密码")

driver.find_element_by_class_name("loading_btn").click()

time.sleep(3)

#进入139网盘模块
driver.find_element_by_xpath("/html/body/div[3]/a[9]/span[2]").click()
time.sleep(3)

#上传文件
driver.find_element_by_id("id_file").send_keys('D:\\selenium_use_case\upload_file.txt')

time.sleep(5)

driver.quit()

9、处理下拉框、switch_to_alert()accept()

10、控制滚动条到底部

#将页面滚动条拖到底部

js="var q=document.documentElement.scrollTop=10000"

driver.execute_script(js)

time.sleep(3)

#将滚动条移动到页面的顶部

js="var q=document.documentElement.scrollTop=0"

driver.execute_script(js)

time.sleep(3)

11、键盘按键、键盘组合键、send_keys()输入中文运行报错问题

通过send_keys()调用按键:

键盘组合键:

#ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')

#ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')

send_keys() 输入中文运行报错问题:

send_keys(u"输入中文"),

注:字符串前加上u表示字符串为Unicode编码,Unicode为2字节长度编码,汉字即采用这种编码方式。而每次代码第一行的# --coding: utf-8 --表示UTF-8的实现方式。UTF-8是使用最广的一种unicode的实现方式,是为传输而设计的编码,表示每次传输8位数据。

12、cookies处理

13、鼠标事件

ActionChains

需要注意的是,鼠标的操作不属于webelement的对象,而属于ActionChains 类。因此要测试鼠标的操作,需要在代码开始import进相关的包。如下:

from selenium.webdriver.common.action_chains import ActionChains

而后可以进行鼠标的测试,如以下代码:

#定位到要双击的元素
qqq =driver.find_element_by_xpath("xxx")
#对定位到的元素执行鼠标双击操作
ActionChains(driver).double_click(qqq).perform()

关于unittest

利用selenium IDE(集成在Firefox浏览器中),录制自动化测试脚本。学习基于unittest框架的自动化测试。

题外:

1、自动化测试中解决验证码问题

让开发注释掉验证码部分代码、给测试人员留后门(设置“万能验证码”)、cookies读取验证码

2、关于xpath可以参考
http://www.w3school.com.cn/xpath/xpath_syntax.asp

上一篇下一篇

猜你喜欢

热点阅读