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()
    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9906499.html
Copyright © 2011-2022 走看看