Selenium2+python自动化63-二次封装(click/send_kesy)

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

先来一波小广告,百度阅读搜索:selenium,购买小编和葵花大神的正版书

一、显示等待

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

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

3.以百度的搜索为例

二、封装定位方法

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

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

三、封装成类

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 import webdriver
from selenium.common.exceptions import *   # 导入所有的异常类
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

class Yoyo(object):
    """基于原生的selenium框架做了二次封装."""
    def __init__(self):
        """启动浏览器参数化,默认启动firefox."""
        self.driver = webdriver.Firefox()

def get(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))
        return element

def click(self, locator):
        '''点击操作'''
        element = self.find_element(locator)
        element.click()

def send_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://yuedu.baidu.com/ebook/0f6a093b7dd184254b35eefdc8d376eeaeaa17e3

(0)

相关推荐

  • Python爬取淘宝销量数据!这年头数据就是钱啊

    前言 一.基本环境配置 python版本:python 3.8.3 编辑器:anaconda3下的spyder 浏览器版本:Google Chrome 87.0.4280.88 浏览器驱动器:本文通过 ...

  • 【python selenium的web自动化】- PageObject模式解析及案例

    https://www.cnblogs.com/miki-peng/category/1942527.html PO模式 Page Object(简称PO)模式,是Selenium实战中最为流行,并且 ...

  • python3 selenium 抓取网页多个表格数据,并导入execl中

    python3 selenium 抓取网页多个表格数据,并导入execl中

  • 自动化搭建环境及基础理论

    在dos命令中输入python,在dos命令中输入pip Pip是Python官方推荐的包管理工具,提供了对Python包的查找.下载.安装.卸载的功能,属于python的一部分. Python3.0 ...

  • scrapy实践之中间件的使用

    在scrapy框架中,Downloader Middlewares 称之为下载中间件, 可以对爬虫的requests请求进行封装处理,典型的应用有以下3种 1. 添加用户代理 所有的中间件代码都保存在 ...

  • Selenium2+python自动化46-js解决click失效问题

    前言 一.遇到的问题 1.在练习百度的搜索设置按钮时,点保存设置按钮,alert弹出没弹出(代码没报错,只是获取alert失败),相信不只是我一个人遇到过. 二.点击父元素 1.遇到这种问题,应该是前 ...

  • Selenium2+python自动化36-判断元素存在

    前言 最近有很多小伙伴在问如何判断一个元素是否存在,这个方法在selenium里面是没有的,需要自己写咯. 元素不存在的话,操作元素会报错,或者元素有多个,不唯一的时候也会报错.本篇介绍两种判断元素存 ...

  • Selenium2+python自动化37-爬页面源码(page_source)

    前言 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息.selenium的page_source方法可以获取到页面源码. selenium的page_sour ...

  • Selenium2+python自动化38-显示等待(WebDriverWait)

    前言: 在脚本中加入太多的sleep后会影响脚本的执行速度,虽然implicitly_wait()这种方法隐式等待方法随时一定程度上节省了很多时间. 但是一旦页面上某些js无法加载出来(其实界面元素经 ...

  • Selenium2+python自动化39-关于面试的题

    前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点. 一.selenium中如何判断元素是否存在? 首先seleniu ...

  • Selenium2+python自动化40-cookie相关操作

    前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...

  • Selenium2+python自动化41-绕过验证码(add_cookie)

    前言 验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的.如果你能破解,说明你们公司的验证码安全级别不高,那就需要提高级别了. 处理验证码,要么 ...

  • Selenium2+python自动化42-判断元素(expected_conditions)

    前言 经常有小伙伴问,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_conditions模块收集了一系列的场景判断方 ...

  • Selenium2+python自动化43-判断title(title_is)

    前言 获取页面title的方法可以直接用driver.title获取到,然后也可以把获取到的结果用做断言. 本篇介绍另外一种方法去判断页面title是否与期望结果一种,用到上一篇Selenium2+p ...