博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium模拟事件处理
阅读量:6585 次
发布时间:2019-06-24

本文共 3006 字,大约阅读时间需要 10 分钟。

执行原理:

调用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 webdriverfrom time import sleepfrom selenium.webdriver.common.action_chains import ActionChainsdrive = 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 Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 上方是显性等待需要导入的from selenium import webdriverimport timedriver = 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 webdriverdriver = webdriver.Chrome()driver.get('************0')driver.find_element_by_id('wd').click()# 切换窗口win_alert = driver.switch_to.alert()win_alert.accept()

 

转载于:https://www.cnblogs.com/zhoulixiansen/p/9906499.html

你可能感兴趣的文章
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
五年 Web 开发者 star 的 github 整理说明
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
中台之上(五):业务架构和中台的难点,都是需要反复锤炼出标准模型
查看>>
React Native 0.20官方入门教程
查看>>
JSON for Modern C++ 3.6.0 发布
查看>>
我的友情链接
查看>>
监听在微信中打开页面时的自带返回按钮事件
查看>>
第一个php页面
查看>>
最优化问题中黄金分割法的代码
查看>>
在JS中使用Ajax
查看>>
Jolt大奖获奖图书
查看>>
ubuntu 16.04 安装PhpMyAdmin
查看>>
设置分录行按钮监听事件
查看>>
23种设计模式(1):单例模式
查看>>
socket 编程入门教程(五)UDP原理:4、“有连接”的UDP
查看>>
Jquery获取iframe中的元素
查看>>
Laravel 学习笔记5.3之 Query Builder 源码解析(下)
查看>>
Struts2简单入门实例
查看>>
2012CSDN年度博客之星评选http://vote.blog.csdn.net/item/blogstar/xyz_lmn
查看>>