当前位置: 首页 > news >正文

python显示等待的封装_Selenium2+python自动化63-二次封装(click/send_kesy)

我们学了显示等待后,就不需要sleep了,然后查找元素方法用参数化去定位,这样定位方法更灵活了,但是这样写起来代码会很长了,于是问题来了,总不能每次定位一个元素都要写一大堆代码吧?这时候就要学会封装啦

一、显示等待

1.如果你的定位元素代码,还是这样:driver.find_element_by_id("kw").send_keys("yoyo"),那说明你还停留在小学水平,如何让代码提升逼格呢?

2.前面讲过显示等待相对于sleep来说更省时间,定位元素更靠谱,不会出现一会正常运行,一会又报错的情况,所以我们的定位需与WebDriverWait结合

3.以百度的搜索为例

09ab039b72a20d9c6dc4d188f7e52c01.png

二、封装定位方法

1.从上面代码看太长了,每次定位写一大串,这样不方便阅读,写代码的效率也低,于是我们可以把定位方法进行封装

2.定位方法封装后,我们每次调用自己写的方法就方便多了

c04c2fb8edee096a67f99fdc2dbb9fbf.png

三、封装成类

1.我们可以把send_keys()和click()方法也一起封装,写到一个类里

2.定位那里很多小伙伴弄不清楚lambda这个函数,其实不一定要用这个,我们可以用EC模块的presence_of_element_located()这个方法,参数直接传locator就可以了

3.以下是presence_of_element_located这个方法的源码:

class presence_of_element_located(object):

""" An expectation for checking that an element is present on the DOM

of a page. This does not necessarily mean that the element is visible.

locator - used to find the element

returns the WebElement once it is located

"""

def __init__(self, locator):

self.locator = locator

def __call__(self, driver):

return _find_element(driver, self.locator)

四、参考代码

1.把get、find_element、click、send_keys封装成类#coding:utf-8

from selenium importwebdriverfrom selenium.common.exceptions import * #导入所有的异常类

from selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.ui importWebDriverWaitclassYoyo(object):"""基于原生的selenium框架做了二次封装."""

def __init__(self):"""启动浏览器参数化,默认启动firefox."""self.driver=webdriver.Firefox()defget(self, url):‘‘‘使用get打开url‘‘‘self.driver.get(url)def find_element(self, locator, timeout=10):‘‘‘定位元素方法封装‘‘‘element= WebDriverWait(self.driver, timeout, 1).until(EC.presence_of_element_located(locator))returnelementdefclick(self, locator):‘‘‘点击操作‘‘‘element=self.find_element(locator)

element.click()defsend_keys(self, locator, text):‘‘‘发送文本,清空后输入‘‘‘element=self.find_element(locator)

element.clear()

element.send_keys(text)if __name__ == "__main__":

d= Yoyo() #启动firefox

d.get("https://www.baidu.com")

input_loc= ("id", "kw")

d.send_keys(input_loc,"yoyo") #输入搜索内容

button_loc = ("id", "kw")

d.click(button_loc)#点击搜索按钮

原文:https://www.cnblogs.com/jason89/p/9028793.html

相关文章:

  • solr php mysql_php使用solr全文搜索引擎
  • mysql前n名_MySQL 选择前n个记录
  • python 实现字典树_python 字典树(前缀树)基本操作:插入,删除、查找
  • java 1.9_JAVA-1.9-上机
  • java程序入口_浅析java程序入口main()方法
  • java 下载 docx文件_java 写个controller下载文件(word);两种方式
  • javascript java难度_javascript比java难吗?
  • java map cache_java Map实现的cache manager
  • java中的链表类_6.JAVA-链表实例
  • java 二分查找 简书_二分查找的三种模板(C++,Java,Python)
  • 用java实现矩阵链乘积_矩阵最优链乘及Java实现
  • java泛型 语法_Java泛型中的? super T语法
  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android Studio:GIT提交项目到远程仓库
  • EventListener原理
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PhantomJS 安装
  • Python利用正则抓取网页内容保存到本地
  • Python实现BT种子转化为磁力链接【实战】
  • tab.js分享及浏览器兼容性问题汇总
  • Vue官网教程学习过程中值得记录的一些事情
  • 笨办法学C 练习34:动态数组
  • 成为一名优秀的Developer的书单
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 二维平面内的碰撞检测【一】
  • 浮现式设计
  • - 概述 - 《设计模式(极简c++版)》
  • 构造函数(constructor)与原型链(prototype)关系
  • 猴子数据域名防封接口降低小说被封的风险
  • 马上搞懂 GeoJSON
  • 盘点那些不知名却常用的 Git 操作
  • 首页查询功能的一次实现过程
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #预处理和函数的对比以及条件编译
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NSDate) 时间 (time )比较
  • (十六)一篇文章学会Java的常用API
  • (五)网络优化与超参数选择--九五小庞
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 生成二级域名
  • .NET实现之(自动更新)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /var/lib/dpkg/lock 锁定问题
  • ?php echo ?,?php echo Hello world!;?