• 常见自动化场景处理


    1.定位一组对象

     content = driver.find_elements_by_css_selector('div.con_content p')

        for con in content:

            print(con.text)

    2.层级定位

    driver.find_element_by_id('***').find_element_by_id('***') 

    3.定位frame中的对象

    driver.switch_to_frame('login_frame') #切换至iframe框架

    driver.switch_to_default_content()#切换至原来的页面

    4.alert/confirm/prompt处理

       *selenium提供一个alert(),用来统一处理三种弹窗

    driver.switch_to_alert()    #切换至alert

    driver.switch_to_default_content()  #切换至原来原面

    driver.switch_to_alert().accept() #弹窗页面确认按钮点击

    driver.switch_to_alert().dismiss()#弹窗页面取消按钮点击

    driver.switch_to_alert().text #弹窗页面文本内容获取

    driver.switch_to_alert().sendKeys():写入内容到prompt弹窗内的文本框中

     

    5.下拉框处理

    ## 方法一:下拉框通过元素定位识别
    driver.find_element(By.CSS_SELECTOR,'option[value="eryue"]').click()
    time.sleep(3)
    # 方法二:创建一个select的对象
    s = driver.find_element_by_id('month') # 识别下拉菜单元素
    se = Select(s)  # 定义下拉菜单操作对象
    # 1、按索引位置
    se.select_by_index(0)
    # 2、按照value值
    se.select_by_value('sanyue')
    # 3、按照文本内容
    se.select_by_visible_text('二月')
    
    # 方法三:通过层级定位
    driver.find_element_by_id('month').find_element_by_css_selector('option[value="eryue"]').click()

    6.调用JavaScript

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get('http://www.12306.cn')
    
    # 第一种 直接执行js语句
    # driver.execute_script('alert("hello world!!")')
    # 第二种 另一种是在某个已经定位的元素上执行js
    wl = driver.find_element_by_id('fromStationText')  # 先要定位到元素 定义成变量
    driver.execute_script("arguments[0].style.border='5px solid red'", wl)
    
    # 修改元素的属性值
    
    Js = 'arguments[0].removeAttribute("readonly");' #移除元素的value属性
    e = driver.find_element_by_id('train_date')
    driver.execute_script(Js,e)
    
    js_modify= "document.getElementById('train_date').value='P2'"
    driver.execute_script(js_modify,e)
    
    
    # 操作浏览器的滚动条
    # driver.execute_script(“document.body.scrollTop=10000;”)# 这句话有些浏览器无法实现滚动
    time.sleep(5)
    # 在这之前最好将窗口最大化
    driver.execute_script("document.documentElement.scrollTop=10000;")  # scrollTop = 值 足够大 就会滚动到浏览器的最低部
    # 滚动到指定元素位置
    driver.execute_script('''document.querySelector("[href='/ucenter/password']").scrollIntoView()''')

    7.浏览器多窗口处理

        方法一:获取所有窗口返回列表,以索引获取

    handles = driver.window_handles # 获取当前打开的所有窗口的句柄

    driver.switch_to.window(handles[0]) #切换到百度首页(切换到第一个打开的页面)

    方法二:处理两个窗口的切换

     

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get('http://mail.126.com')
    # 两个窗口的操作思路
    # 获取当前页面的窗口句柄
    handle = driver.current_window_handle # 返回值是一个字符串
    print(handle)
    # 再打开新的标签页
    driver.find_element_by_link_text('企业邮箱').click()
    # 再获取所有窗口的句柄
    handles = driver.window_handles  # 返回值是一个列表
    print('窗口的句柄',handles)
    # 开始判断是否是新要打开的窗口,如果是就跳转driver
    for h in handles: #
        if h !=handle:
            driver.switch_to.window(h)
    # 在新的标签页面进行元素操作
    driver.find_element_by_link_text('产品').click()
    time.sleep(5)
    driver.quit()

     

    方法三:处理多个窗口打开时切换

      

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get('http://mail.126.com')
    # 获取首页句柄
    home_handle = driver.current_window_handle
    # 打开多个窗口
    driver.find_element_by_link_text('企业邮箱').click()
    time.sleep(1)
    driver.find_element_by_link_text('VIP邮箱').click()
    # 获取所有窗口的句柄
    handles = driver.window_handles
    # 进行判断,跳转driver
    for h in handles:
        driver.switch_to.window(h)
        if '企业邮箱' in driver.title:
            break
    
        if 'vip' in driver.current_url:
            break
    driver.find_element_by_link_text('产品').click()
    time.sleep(5)
    driver.quit()

     

    8.验证码处理

       验证码的处理方式:  

        1、去掉验证码---只适用于测试环境

        2、设置万能码---只适用于测试环境

        3、验证码识别技术--识别率比较低--python中提供了方法去识别图片中的文字,因为验证码一般会做模糊处理  

        4、手动输入(设置等待,手动输入)

        5、使用cookie绕过验证码,只能绕过登陆---cookie有时效性 (见9.cookie处理)

    9.cookie处理

        使用cookie绕过登录页面直接登录

        步骤:

       1.获取登录后的cookie信息

       2.删除所有cookie信息(driver.delete_all_cookies()

       3.将cookie信息使用driver.add_cookie()方法逐一添加

       4.刷新页面

    添加cookie代码:

    from time import sleep
    
    from case.drivers_set import driver
    
    driver.get('http://shop.aircheng.com/')
    driver.maximize_window()
    driver.delete_all_cookies()#把所有cookie全部删掉
    cookies_info = {#name,value
        'iweb_last_login':'c0300d28fd4a418845VQdTUgQFVgkDVQIBAwkOVgYHBlZSCARVXQJVBlVQAgdQBQJUT1VXHQcJRgYADlYHCAAF',
        'iweb_user_pwd':'241ed37b7448aea5e9VgkEAVQCAwNUAQhWU1NRB1AAAQcIBlhXUV1YU1cMVFZQUglXV1MECw0IV1lTXVRbUgZUVwZRAlQAUFMCXV0GUg',
        'iweb_username':'da538fb4d7c35be078UVNRAgMFUVEHBltRUgBXVgJSV1AGBwFXA1YDAVoAD1YJWgdcX0hJ',
        'iweb_user_id':'d3560da07629066935CVIGAQRSB1UFAAEKXg0GCw0GVV1UDA0EBQEBXQsHUVVXDg',
        'PHPSESSID':'f1cci9rklj7j1v3jdghsc89sq3',
        'iweb_callback':'1a2cb3437751a57244VlYBAgdTBFQIAVoCVwADWQcFUlUKDVQMBAYKUlIDBAc',
        'iweb_head_ico':'dd7ed0b46fa7cb8effBFJWCQYHVgRSBwIGVgNWUldUUQRTAQNfBVEAUVZSBQU',
        '__cfduid':'d2407355743689c42c39d3b14889a8d7c1589769872'
    }
    #一个一个将cookie信息传入进去
    for c,s in cookies_info.items():  # items() 方法以列表返回可遍历的(键, 值) 元组数组
        cookies_lists = {
        'domain':'shop.aircheng.com',
        'httpOnly': False,
        'secure': False,
        'name': c,
        'path': '/',
        'value':s
        }
        driver.add_cookie(cookies_lists)
    driver.refresh()
    sleep(2)
    driver.quit()
  • 相关阅读:
    LRESULT CALLBACK WndProc 窗口程序的 重点
    vs2012打开低版本项目时 出现vs2012警告未能加载包“visual c++ package 解决办法
    const char*, char const*, char*const的区别
    js手机短信按钮倒计时
    控件案例
    laydate.js时间选择
    jquery.reveal弹出框
    表格内容控制(换行、不换行、隐藏)
    sql 把特定数据排在最前面
    jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
  • 原文地址:https://www.cnblogs.com/joy-field/p/12876679.html
Copyright © 2020-2023  润新知