1. __author__ = 'Mickey0s'
  2. # coding:utf8
  3.  
  4. from selenium import webdriver
  5. from selenium.webdriver.common.by import By
  6. from selenium.webdriver.support.ui import WebDriverWait as wdw
  7. from selenium.webdriver.support import expected_conditions as ec
  8. from random import randint
  9. from time import sleep
  10.  
  11. dr = webdriver.Ie()
  12. url = u'http://s.cr-nielsen.com/q/402/cn0376/html/402.htm'
  13.  
  14. def singleradio(na):
  15.  
  16. wdw(dr, 10).until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[type="radio"]')))
  17. radios = dr.find_elements_by_css_selector('input[type="radio"]')
  18. if len(radios) > 3:
  19. if na == 'Q1':
  20. radios[2].click()
  21. else:
  22. radios[randint(0, len(radios)-3)].click()
  23. else:
  24. radios[0].click()
  25.  
  26. dr.find_element_by_class_name('submit-button').click()
  27. sleep(1)
  28. return dr.window_handles
  29.  
  30. def textfill(na):
  31. wdw(dr, 10).until(ec.presence_of_all_elements_located)
  32. texts = dr.find_element_by_name(na).find_elements(By.CSS_SELECTOR, 'input[type=text]')
  33. for i in texts:
  34. i.send_keys('i am a fish!')
  35.  
  36. dr.find_element_by_class_name('submit-button').submit()
  37. sleep(1)
  38. return dr.window_handles
  39.  
  40. def tableradio(na):
  41.  
  42. tables = dr.find_element_by_name(na).find_element_by_tag_name('tbody').find_elements_by_tag_name('tr')
  43. for i in tables[:]:
  44. dr.implicitly_wait(3)
  45. tem = i.find_elements_by_tag_name('td')
  46. wdw(dr, 10).until(ec.presence_of_all_elements_located)
  47. t = tem[randint(1, len(tem)-1)].find_element_by_tag_name('input')
  48. if ec.element_to_be_clickable(t):
  49. t.click()
  50.  
  51. dr.find_element_by_class_name('submit-button').submit()
  52. sleep(1)
  53. return dr.window_handles
  54.  
  55. def checkbox(na):
  56. wdw(dr, 10).until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[type="checkbox"]')))
  57. boxs = dr.find_elements_by_css_selector('input[type="checkbox"]')
  58. boxs.pop(-2)
  59. l = len(boxs)
  60. for i in boxs:
  61. if randint(0, l-1)%2 == 0:
  62. i.click()
  63. dr.find_element_by_class_name('submit-button').submit()
  64. sleep(1)
  65. return dr.window_handles
  66.  
  67. page = {'Q1': (singleradio, '请问,您的年龄是?(单选)'),
  68. 'Q1B': (textfill, '想到的是哪些品牌'),
  69. 'Q2B': (tableradio, '品牌的熟悉程度?(横向单选)'),
  70. 'Q3B': (tableradio, '总体评价是?(横向单选)'),
  71. 'Q4B': (tableradio, '购买以下品牌的可能性有多大? (横向单选)'),
  72. 'Q5B': (singleradio, '倾向购买以下哪个品牌?(单选) '),
  73. 'Q6B': (tableradio, '同意程度如何?(每行单选) '),
  74. 'Q1Ca': (singleradio, '是否看到过这个视频广告?[单选]'),
  75. 'Q2Ca': (singleradio, '多喜欢这个广告?[单选]'),
  76. 'Q2Cb': (singleradio, '多喜欢这个广告?[单选]'),
  77. 'Q3Ca': (checkbox, '哪些方面是您所喜欢的?[可多选] '),
  78. 'Q3Cb': (checkbox, '哪些方面是您所喜欢的?[可多选] '),
  79. 'Q4Ca': (checkbox, '您所不喜欢的?[可多选]'),
  80. 'Q5Ca': (singleradio, '哪一项符合这个广告?[单选]'),
  81. 'Q6Ca': (tableradio, '是否同意下列描述?[每行单选] '),
  82. 'Q1Cb': (singleradio, '看到过这个视频广告?[单选]'),
  83. 'Q1D': (singleradio, '图片广告(横幅、竖栏、浮层等)?[单选]'),
  84. 'Q1S': (singleradio, '性别是?(单选)'),
  85. 'Q2S': (singleradio, '学历是?(单选)'),
  86. 'Q3S': (singleradio, '职业是?(单选) '),
  87. 'Q4S': (singleradio, '税前个人月收入?(单选) '),
  88. 'Q5S': (singleradio, '孩子多大了?(单选) '),
  89. 'Q6S': (singleradio, '阅读几本书籍'),
  90. 'Q7S': (checkbox, '哪些电子设备?(可多选) '),
  91. 'Q8S': (checkbox, '哪些电子设备?(可多选) '),
  92.  
  93. }
  94.  
  95. try:
  96. dr.get(url)
  97. frame = dr.find_elements_by_tag_name('frame')
  98. if len(frame) == 1:
  99. dr.switch_to_frame(frame[0])
  100.  
  101. for e in page:
  102.  
  103. te = dr.find_element_by_css_selector('a[name]')
  104. tt = te.get_attribute('name')
  105. print tt
  106. try:
  107. w = page[tt][0](tt)
  108. finally:
  109. print 0
  110.  
  111. dr.switch_to_window(w[-1])
  112. frame = dr.find_elements_by_tag_name('frame')
  113. if len(frame) == 1:
  114. dr.switch_to_frame(frame[0])
  115.  
  116. finally:
  117. sleep(5)
  118. dr.quit()

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

  1. btw: 练习项目,非正式
  2.  
  3. 1. 对一种类型的页面,类似的操作包装成函数
  4.  
  5. 2. 试着使用page factory, 元素、操作、数据分离(这个练习没有多少数据)
  6.  
  7. 3. 元素定位,对于复杂的元素定位,还是要用CSSxpath
  8.  
  9. 4. 判断每个页面的类型,在字典中选择对应类型的操作。此练习使用的 关键字
  10.  
  11. 5.点击下一个页面后,用一遍dr.switch_to_window(w[-1]),没检验过是否必要
  12.  
  13.  dr.switch_to_window(w[-1])
  14. frame = dr.find_elements_by_tag_name('frame')
  15. if len(frame) == 1:
  16. dr.switch_to_frame(frame[0])
  17.  
  18. 未解决:
  19.  
  20. 总结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. phonegap + xcode5.0.2 配置开发环境

    phonegap官网:  http://phonegap.com/ 第一部:安装nodejs 安装地址:http://nodejs.org/ 安装phoneGap 官网下载http://phonega ...

  2. 转: Hibernate commit() 和flush() 的区别

    [java] view plaincopyprint? <<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语 ...

  3. 如何理解和熟练运用js中的call及apply?

    改变this指向 要先明白存在call和apply的原因,才能记得牢一点: 在javascript OOP中,我们经常会这样定义: function cat(){ } cat.prototype={ ...

  4. android studio使用中遇到的问题

    旧版和新版切换会报错(点击更正, 不影响程序使用) 2.debug正常, 打包签名程序时候报错 String index out of range: -82 java.lang.StringIndex ...

  5. Scala编程--基本类型和操作

    如果你熟悉Java,你会很开心地发现Java基本类型和操作符在Scala里有同样的意思.然而即使你是一位资深Java开发者,这里也仍然有一些有趣的差别使得本章值得一读.因为本章提到的一些Scala的方 ...

  6. 读IT小小鸟有感

           第一次阅读<我是一只IT小小鸟>是在老师的推荐下的,我是一名软工大一新生,那天在课堂上听到了这本书,由于是10年前的老书,要找到它非常不易,终于在网上看到一些部分电子档.   ...

  7. X3850M2安装CertOS 7 KVM 2--VNC

    需要安装远程桌面,否则无鼠标的日子比较难. VNC的安装需要步骤较多,重点参考以下文章: http://www.itzgeek.com/how-tos/linux/centos-how-tos/con ...

  8. ViewPager实现自动翻页功能 --转载出处找不到了,根据自己的理解写个随笔方便以后的记忆以及代码的共享,感谢给我启发的那位高手--第一次写博客哈

    xml文件 textview 用于显示图片的标题 viewpager 用于实现翻页效果 <LinearLayout xmlns:android="http://schemas.andr ...

  9. iscroll修改

    近期项目中使用iScroll遇到一个问题,在设定wrapper为横向滚动时,如果你手指放在该区域,将无法拉动页面,也就是说该区域取消了默认事件.这个体验是实在是无法接受,特别是页面中有多个横向滚动区域 ...

  10. node_modules\typescript\lib 未指向有效的 tsserver 安装 将禁用TypeScript 语言功能

    Ionic2 项目中经常遇到这个问题 每次都找半天无果. 简单记录一下  粗暴的解决办法: 卸载ts并从新安装即可 //卸载typescript npm uninstall typescript // ...