__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. Scala 学习笔记(五)

    def main(args : Array[String]): Unit = { def add(x:Int,y:Int):Int = { return x+y; } def subtract:(In ...

  2. RP4412开发板在Android系统编译生成ramdisk-uboot.img

    荣品RP4412开发板在android系统编译的时候,怎么生成ramdisk-uboot.img生成流程分析: mkimage -A arm -O linux -T ramdisk -C none - ...

  3. NOIP 2015 游记

    本来和zly和wxh约好了 高三一起再来玩一次复赛,结果最终只有我一个人来了说...貌似是年段主任不让去...总算见识了比我们学校的YSD更爱管闲事的年段主任. 今年比赛竟然在衢州二中,学校不大,但感 ...

  4. storm启动过程之源码分析

    TopologyMaster: 处理拓扑的一些基本信息和工作,比如更新心跳信息,拓扑指标信息更新等   NimbusServer: ** * * NimbusServer work flow: 1. ...

  5. sasasa

    /***************************************************************************************** 文件:app_to ...

  6. Also unsere eigene Christian Louboutin Webshop bietet die überragende Christian Louboutin Schuhe uk schiebt zusammen mit kostengünstigen Wert

    www.heelschuhe.de, Es ist wirklich eine der Frauen erfordern immer interessant und auch Louboutin Pu ...

  7. CSS兼容问题实用建议

    CSS兼容问题,是美工最头痛的问题.做测试时,用谷哥和360浏览器(最新)都没有什么问题,用 IE6/IE8测试,问题就冒出来了.微软现在出IE10,我电脑上已经无法用IE6准确测试,IE-TESTE ...

  8. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

    c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast  [版权声明]转载请注明出处 http://www.cnblogs.c ...

  9. hihoCoder#1039

    刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在 ...

  10. Yii Uploadify批量上传

    控制器: $reinfo = "fail"; $filename=""; //重要说明: //使用uploadify 上传时,每次这个sessionID都会改变 ...