zoukankan      html  css  js  c++  java
  • selenium模拟事件处理

    执行原理:

    调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,从队列中的事件会依次执行。

    支持链式写法或者是分布写法。

    鼠标键盘方法列表:

        perform() 执行链中的所有动作

        click(on_element=None) 单击鼠标左键

        context_click(on_element=None) 单击鼠标右键

        move_to_element(to_element) 鼠标移动到某个元素

        ele.send_keys(keys_to_send) 发送某个词到当前的焦点元素

    —————————————— 不常用的————————————

        click_and_hold(on_element=None) 单击鼠标左键不松开

        release(on_element=None) 在某个元素位置松开鼠标左键

        key_down(value, element=None) 按下某个键盘上的键

        key_up(value, element=None) 松开某个键

        drag_and_drop(source, target) 拖拽到某个元素然后松开

        drag_and_drop_by_offset(source, xoffset, yoffset)  拖拽到某个坐标然后松开

        move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标

        move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置

    鼠标的事件hover菜单栏弹出

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/11/4 22:00'
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.common.action_chains import ActionChains
    
    drive = webdriver.Chrome()
    drive.get('https://xdclass.net')
    sleep(2)
    # 定位鼠标移动到上面的元素
    menu_list = drive.find_element_by_css_selector('#banner_left_ul > a:nth-child(1) > li')
    ActionChains(drive).move_to_element(menu_list).perform()
    
    # 对定位到的元素选中吧子菜单
    sub_menu_list = drive.find_element_by_css_selector('#active > div.des_top > div.des_one > div.des_text > a:nth-child(1)')
    sleep(3)
    sub_menu_list.click()

     网页等待时间

    等待时间的选择方式

    1,强制等待,用time.sleep()方法,一般自己调试使用

    2,drive.implicitly_wait(10)

    隐性等待,设置一个最长等待时间,如果规定时间内加载完成,执行下一步,否则一直等待到时间截止,才会执行下一步操作,弊端是程序会一直等待整个页面的加载完成,到浏览器标签栏的加载圈不在转圈

    注意:对driver起作用,使用仅仅需要设置一次即可,没有必要到处设置。

    3,显性等待,WebDriverWait需要配合

    until和until_not,程序每隔N秒检查一次,如果成功,执行下一步,否则继续等待,直到超出最长设置时间,

    from selenium.webdriver.support.wait import WebDriverWait

    语法:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

    首先导入:

    from selenium.webdriver.common.by import By

    from selenium.webdriver.support.ui import WebDriverWait

    from selenium.webdriver.support import expected_conditions as EC

    上代码

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/11/5 20:02'
    # 网页等待时间
    
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    # 上方是显性等待需要导入的
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get('https://baidu.com')
    # 强制睡眠
    time.sleep(10)
    # 隐性等待,全局设置一次
    driver.implicitly_wait(10)
    # 显性等待
    try:
        ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
        # 5代表最大等待时间,每0.5s检查一次,直到找到ID为kw,找不到就会抛异常
    except:
        print('加载失败,一般发送一个邮件或者短信')
    finally:
        print('不管成功与否,都打印,用于资源清理')
    driver.quit()

    注意:隐性等待和显性等待可以同时出现,设置超时时间不同会按照最大的等待时间来确定!

     弹窗的常用方法:

    自动化测试页面常见的弹窗处理

        简介:讲解使用selenium处理页面弹窗,alert和comfirm

        常见方法:(需要先切换窗口 switch_to_alert()

            accept() 接受

            dismiss() 取消

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/11/6 20:11'
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('************0')
    driver.find_element_by_id('wd').click()
    # 切换窗口
    win_alert = driver.switch_to.alert()
    win_alert.accept()
    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    JavaScript 按位与和逻辑与
    JavaScript跨域问题
    前端-知识+能力感触
    堆&堆排序
    Java中的数据类型和引用
    基础算法之选择排序
    基于TCP协议的网络通讯流程
    Java基础之封装
    个人主页
    算法基础之希尔排序
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9906499.html
Copyright © 2011-2022 走看看