您的位置:首页 > 其它

使用selenium和webdriver进行自动化测试

2016-09-18 14:21 1276 查看
一、搭建环境

本文默认已经有python环境,并且能看懂python。(不会的可以百度,Python环境还是很好搭建的)

以下实验都是在python2.7环境下运行的

(1)安装selenium

在python安装目录的Scripts下(比如我的是:D:\program files\python2.7.0\Scripts)运行命令行,并输入以下命令安装:

pip install -U selenium

搭建java环境(这里也不多说,自行百度)
下载selenium的服务端(下载地址:http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jar)

解压,然后在selenium-server-standalone-2.53.0.jar的目录下使用命令java -jar selenium-server-standalone-2.53.0.jar 启动。

在本文中还用不到服务端,所以可以暂时不启动。

(2)安装chrome driver

chrome driver下载地址:http://chromedriver.storage.googleapis.com/index.html?path=2.7/

解压后,将chromedriver.exe文件放在chrome的安装目录下的Application文件夹下(比如我的是:C:\Program Files (x86)\Google\Chrome\Application)

然后设置path环境变量,把chrome的安装目录(比如我的是:C:\Program Files (x86)\Google\Chrome\Application)添加到path中。

然后使用下列程序来测试一下:

# coding=utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

print driver.title

driver.quit()
可能出现的错误:
1. chromedriver.exe文件被杀毒软件删掉,程序运行后报错:找不到路径。

解决方法:在杀毒软件中为chromedriver.exe添加信任

2. 提示Chrome version的问题,版本过旧

解决方法:给Chome升级,右上角的三点->帮助->关于Google Chrome->版本更新

二、使用程序自动在百度中输入搜索词进行搜索

# coding=utf-8

from selenium import webdriver

import time

# 打开chrome浏览器
driver = webdriver.Chrome()

# 输入网址,打开www.baidu.com
driver.get('http://www.baidu.com')

# 找到id=kw的输入框,输入selenium
driver.find_element_by_id("kw").send_keys("selenium")

# 找到id=su的按钮,进行点击
driver.find_element_by_id("su").click()

# 睡眠5秒
time.sleep(5)

# 关闭浏览器
driver.quit()

三、使用程序自动登录新浪微博

# coding=utf-8

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time,os

# 打开chrome浏览器
driver = webdriver.Chrome()

# 输入网址,打开www.baidu.com
driver.get('http://weibo.com')

driver.maximize_window()
driver.implicitly_wait(20)

# 有的输入框可能有默认的一些提示值,先将框中的值删掉
# driver.find_element_by_id("loginname").clear()
# 找到id=loginname的输入框,输入用户名
driver.find_element_by_name("username").send_keys("18606146174")

# Keys.TAB相当于模拟处于账号框时使用TAB键然后移动到下面的密码框
driver.find_element_by_name("username").send_keys(Keys.TAB)
time.sleep(2)

# 输入密码
driver.find_element_by_name("password").send_keys("a123456")
# 定位到密码框,然后敲回车(enter)
driver.find_element_by_name("password").send_keys(Keys.ENTER)

# 睡眠5秒
time.sleep(5)

# 关闭浏览器
driver.quit()

在不添加

driver.maximize_window()
driver.implicitly_wait(20)
这两行代码时,会出现下面这个错误



可能是由于页面没有加载完整造成的,通过放大浏览器,使用智能等待,然后再去找相应id或name的元素。

四、其他的用法

(1)webdriver提供了一些列的对象定位方法,常用的有:id,name,class name,link text, partial link text,tag name, xpath, css selector

拿百度的输入框作为例子:

# coding=utf-8

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time,os

# 打开chrome浏览器
driver = webdriver.Chrome()

# 输入网址,打开www.baidu.com
driver.get('http://www.baidu.com')

# 通过id方式定位
driver.find_element_by_id("kw").send_keys("selenium")
# 通过name方式定位
driver.find_element_by_name("wd").send_keys("selenium")
# 通过tag name方式定位
driver.find_element_by_tag_name("input").send_keys("selenium")
# 通过class name方式定位
driver.find_element_by_class_name("s_ipt").send_keys("selenium")
# 通过css方式定位
driver.find_element_by_css_selector("#kw").send_keys("selenium")
# 通过xpath方式定位
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

driver.find_element_by_id("su").click()

time.sleep(3)

# 关闭浏览器
driver.quit()

(2)智能等待

通过添加implicitly_wait()方法就可以方便的实现智能等待;

implicitly_wait(30)的用法应该比time.sleep()更智能,后者智能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

import time
driver.implicitly_wait(30)

(3)打印title
print driver.title # 把页面titile打印出来

(4)浏览器最大化

driver.maximize_window() #将浏览器最大化显示

(5)设置浏览器宽、高
driver.set_window_size(480,800) #设置浏览器宽480、高800显示

(6)操作测试对象
一般webdriver中比较常用的操作对象的方法有下面几个

click 点击对象

send_keys 在对象上模拟按键输入

clear 清除对象的内容,如果可以的话

submit 提交表单

(7)鼠标事件

ActionChains类

context_click() 右击

double_click() 双击

drag_and_drop() 拖动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: