python webdriver 自动化测试练习 1-- 在线调查

__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 中使用关键字,定位页面类型,实际上关键字会变动,导致失败,应该使用更好的判断方法

  

 

  

 

  

转载于:https://www.cnblogs.com/Mickey0s/p/3703695.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值