__author__ = 'Mickey0s'
# coding:utf8 from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wdw
from selenium.webdriver.support import expected_conditions as ec
from random import randint
from time import sleep dr = webdriver.Ie()
url = u'http://s.cr-nielsen.com/q/402/cn0376/html/402.htm' def singleradio(na): wdw(dr, 10).until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[type="radio"]')))
radios = dr.find_elements_by_css_selector('input[type="radio"]')
if len(radios) > 3:
if na == 'Q1':
radios[2].click()
else:
radios[randint(0, len(radios)-3)].click()
else:
radios[0].click() dr.find_element_by_class_name('submit-button').click()
sleep(1)
return dr.window_handles def textfill(na):
wdw(dr, 10).until(ec.presence_of_all_elements_located)
texts = dr.find_element_by_name(na).find_elements(By.CSS_SELECTOR, 'input[type=text]')
for i in texts:
i.send_keys('i am a fish!') dr.find_element_by_class_name('submit-button').submit()
sleep(1)
return dr.window_handles def tableradio(na): tables = dr.find_element_by_name(na).find_element_by_tag_name('tbody').find_elements_by_tag_name('tr')
for i in tables[:]:
dr.implicitly_wait(3)
tem = i.find_elements_by_tag_name('td')
wdw(dr, 10).until(ec.presence_of_all_elements_located)
t = tem[randint(1, len(tem)-1)].find_element_by_tag_name('input')
if ec.element_to_be_clickable(t):
t.click() dr.find_element_by_class_name('submit-button').submit()
sleep(1)
return dr.window_handles def checkbox(na):
wdw(dr, 10).until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[type="checkbox"]')))
boxs = dr.find_elements_by_css_selector('input[type="checkbox"]')
boxs.pop(-2)
l = len(boxs)
for i in boxs:
if randint(0, l-1)%2 == 0:
i.click()
dr.find_element_by_class_name('submit-button').submit()
sleep(1)
return dr.window_handles page = {'Q1': (singleradio, '请问,您的年龄是?(单选)'),
'Q1B': (textfill, '想到的是哪些品牌'),
'Q2B': (tableradio, '品牌的熟悉程度?(横向单选)'),
'Q3B': (tableradio, '总体评价是?(横向单选)'),
'Q4B': (tableradio, '购买以下品牌的可能性有多大? (横向单选)'),
'Q5B': (singleradio, '倾向购买以下哪个品牌?(单选) '),
'Q6B': (tableradio, '同意程度如何?(每行单选) '),
'Q1Ca': (singleradio, '是否看到过这个视频广告?[单选]'),
'Q2Ca': (singleradio, '多喜欢这个广告?[单选]'),
'Q2Cb': (singleradio, '多喜欢这个广告?[单选]'),
'Q3Ca': (checkbox, '哪些方面是您所喜欢的?[可多选] '),
'Q3Cb': (checkbox, '哪些方面是您所喜欢的?[可多选] '),
'Q4Ca': (checkbox, '您所不喜欢的?[可多选]'),
'Q5Ca': (singleradio, '哪一项符合这个广告?[单选]'),
'Q6Ca': (tableradio, '是否同意下列描述?[每行单选] '),
'Q1Cb': (singleradio, '看到过这个视频广告?[单选]'),
'Q1D': (singleradio, '图片广告(横幅、竖栏、浮层等)?[单选]'),
'Q1S': (singleradio, '性别是?(单选)'),
'Q2S': (singleradio, '学历是?(单选)'),
'Q3S': (singleradio, '职业是?(单选) '),
'Q4S': (singleradio, '税前个人月收入?(单选) '),
'Q5S': (singleradio, '孩子多大了?(单选) '),
'Q6S': (singleradio, '阅读几本书籍'),
'Q7S': (checkbox, '哪些电子设备?(可多选) '),
'Q8S': (checkbox, '哪些电子设备?(可多选) '), } try:
dr.get(url)
frame = dr.find_elements_by_tag_name('frame')
if len(frame) == 1:
dr.switch_to_frame(frame[0]) for e in page: te = dr.find_element_by_css_selector('a[name]')
tt = te.get_attribute('name')
print tt
try:
w = page[tt][0](tt)
finally:
print 0 dr.switch_to_window(w[-1])
frame = dr.find_elements_by_tag_name('frame')
if len(frame) == 1:
dr.switch_to_frame(frame[0]) finally:
sleep(5)
dr.quit()

-------------------------

btw: 练习项目,非正式

1. 对一种类型的页面,类似的操作包装成函数

2. 试着使用page factory, 元素、操作、数据分离(这个练习没有多少数据)

3. 元素定位,对于复杂的元素定位,还是要用CSS、xpath

4. 判断每个页面的类型,在字典中选择对应类型的操作。此练习使用的 关键字

5.点击下一个页面后,用一遍dr.switch_to_window(w[-1]),没检验过是否必要

 dr.switch_to_window(w[-1])
frame = dr.find_elements_by_tag_name('frame')
if len(frame) == 1:
dr.switch_to_frame(frame[0]) 未解决: 总结4 中使用关键字,定位页面类型,实际上关键字会变动,导致失败,应该使用更好的判断方法

  

  

  

python webdriver 自动化测试练习 1-- 在线调查的更多相关文章

  1. 转来的——python webdriver自动化测试初步印象——转来的

    python webdriver自动化测试初步印象 以下示例演示启动firefox,浏览google.com,搜索Cheese,等待搜索结果,然后打印出搜索结果页的标题 from selenium i ...

  2. Python WebDriver自动化测试

    转载来自: http://www.cnblogs.com/fnng/p/3160606.html Webdriver Selenium 是 ThroughtWorks 一个强大的基于浏览器的开源自动化 ...

  3. 前端自动化测试python+webdriver

    前言:很多做测试的朋友的就知道,python+webdriver  可以做自动化测试,这对前端开发是非常有用的.  python 入门我就不讲了  ,推荐学习 廖雪峰老师的python入门3.5新版哈 ...

  4. 基于Appium、Python的自动化测试

    基于Appium.Python的自动化测试环境部署和实践   第一章 导言 1.1 编制目的 该文档为选用Appium作为移动设备原生(Native).混合(Hybrid).移动Web(Mobile ...

  5. 转:python webdriver API 之简单对象的定位

    对象(元素)的定位和操作是自动化测试的核心部分,其中操作又是建立在定位的基础上的,因此元素定位就显得非常重要. (本书中用到的对象与元素同为一个事物)一个对象就像是一个人,他会有各种的特征(属性) , ...

  6. 转:python webdriver 环境搭建

    第一节 环境搭建准备工具如下:-------------------------------------------------------------下载 python[python 开发环境]ht ...

  7. python selenium 自动化测试web

    如何使用python完成自动化测试web页面呢?首选selenium   那基于python的selenium如何使用,下面看一段测试案例: 基于python的selenium 安装方法: pip i ...

  8. [转]构建Python+Selenium2自动化测试环境(二)

    构建Python+Selenium2自动化测试环境完成之后,就需要测试支持python的selenium的版本是否都支持在不同浏览器上运行,当前我们分别在三个最通用的浏览器上通过脚本来测试. 1.在I ...

  9. Python Web自动化测试入门与实战,从入门到入行

    Python Web自动化测试入门与实战 购买地址 · 京东:https://item.jd.com/69239480564.html   天猫:https://detail.tmall.com/it ...

随机推荐

  1. webfrrm基础

    一.B/S和C/S 1.C/S C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据 ...

  2. CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源     [root@AY130611215205Z ~]# wget -c http://pkgs.repoforge.or ...

  3. Phonegap中自定义插件的使用

    在phonegap中需要实现特定相关的功能,可能需要自定义扩展一下功能,那么扩展phonegap组件就成为了可能. 源代码结构图: 本文目的在于讲述怎么扩展一个phonegap组件以及实现. 针对ph ...

  4. AutoCAD学习笔记

    学习笔记: **有些命令,有两到三种执行方式:菜单.命令行.对话框.如layer命令,如果在命令行打入layer命令,就会弹出对话框主y式,如果要命令行方式执行,就需要在前面加一个-号,即-layer ...

  5. HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)

    思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0   那么肯 ...

  6. openssl

    openssl genrsa -des3 -out server.key 1024openssl req -new server.key -out servr.csr seserver-fnamese ...

  7. Eclipse中怎么安装TestNG单元测试框架

    在进行使用的eclipse的进行开发的代码中,必然就会需要进行单元测试,在单元测试的情况提供较多的框架单元测试,例如使用junit单元测试,而在国外进行开发较好的单元测试,提供了较好的测试的报告,ju ...

  8. Liunx下安装jdk

    Liunx下安装jdk 1.首先进入ROOT权限  命令 sudo su  输入密码进入 root 权限 2.看下当前liunx 是否存在jdk 环境 ,输入命令 javac,如果存在则会显示对应jd ...

  9. swift 自定义图片轮播视图

    Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...

  10. SVN使用说明

    一,安装客户端SVN 1.下载 "svn小乌龟"后,进行安装.如下图: 安装完成后,右键项目文件夹就可以看到如下: 2:checkout项目文件. 新建或者进入目录下(比如qian ...