Selenium之Page Object Model 设计理念 ------Base篇

在我们学习selenium的po模式之前,我们先要了解什么是自动化测试,以及selenium中的八大定位的基本操作,那么接下来,您可以跟我一起走进po模式中的base篇的编写(也是对基础api的封装)

什么是po?

po既是Page Object Model的简写,是自动化测试中常见的一种设计理念,它将我们常用的一个操作划分为多个页来完成,实现操作层和业务层的分离。

在这里插入图片描述
Base = 封装基础Api,如常用的找元素、点击元素、输入文本信息、以文本信息返回、跳出iframe、alter弹窗处理、切换句柄

Page(填充定位元素) = 通过调用Base页来填充定位元素

Case(用例页) = 通过调用Page页来实现具体的操作,也就是用例页,我们最终要实现的结果

Common(公用类) = common一般存放公用方法,如读取csv表、yaml管理数据方法、日志的封装方法等

Data (数据) = 存放方便我们做数据驱动的数据,比如csv表、json数据、Excel表等

Report(结果存放集)= 我们在unitttest框架中执行后的用例生成html报告的存放处,以及日志信息,如有需要,也可以添加image包来存放截图的图片

Base页的具体编写

在Base包下新建Base页,并创建Base类

from selenium.webdriver.common.action_chains import ActionChains
class Base():
    def __init__(self,driver,url):
        self.driver = driver
        self.url = url
    def get_url(self):  # 打开网页
        self.driver.get(self.url)

    def find_element(self,*data):  # 获取元素信息  需要注意的是,获取一类的都需要return 返回
        return self.driver.find_element(*data)

    def find_elements(self,*data):  # 获取一组元素
        return self.driver.find_elements(*data)

    def click_element(self,*data):  # 点击
        self.find_element(*data).click()

    def click_elements(self,number,*data):  #点击一组元素中的某一个
        self.find_elements(*data)[number].click()

    def input_text(self,text,*data):  #输入文本信息
        test = self.find_element(*data)
        test.clear()  # 先清除
        test.send_keys(text)  # 再输入

    def windows_handles(self,number):  #切换句柄
        self.driver.switch_to.window(self.driver.window_handles[number])

    def iframe_number(self,number):  #根据下标切换iframe
        iframes = self.driver.find_elements_by_tag_name('iframe')
        self.driver.switch_to.frame(iframes[number])

    def iframe_element(self,key,value):  #  根据元素的名和值进行具体的切换
        iframes = self.driver.find_elements_by_tag_name('iframe')
        for i in iframes:
            if i.get_attribute(key) == value:
                self.driver.switch_to.frame(i)

    def iframe_skip(self):  #跳出iframe 回到默认的上下文
        self.driver.switch_to.default_content()

    def move_to_element(self,*data):  # 将鼠标悬浮某一个元素上
        element = self.driver.find_element(*data)
        ActionChains(self.driver).move_to_element(element).perform()

对于Base页,我们要用find_element来封装定位元素方法,因为不确定我们在使用的时候具体是调用哪一个

还有对于Base页的封装越多,我们以后在工作中也会越方便

下篇带来Page页(填充定位元素)

有问题博客下方留言

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值