selenium+Page Objects(第三话)

写好BasePage基类和页面元素定位后,就可以针对每个页面写业务逻辑了

1.编写每个页面page类,拿其中一个页面为例

fourth_page.py(名字我随便取的,实际中希望能取一些有意义的名字)

# coding: utf-8
# author: hmk

from pages.BasePage import BasePage
from locators.locators import Locators

class FourthPage(BasePage):    """定义一个page类,继承自BasePage类"""
    upload_button1 = Locators.fourth_page_locators["upload_button1"]  # 材料列表第一个材料的上传按钮
    upload_t = Locators.fourth_page_locators["upload_t"]
    upload_true = Locators.fourth_page_locators["upload_true"]  # 去掉上传隐藏属性后的真实上传按钮
    confirm = Locators.fourth_page_locators["confirm"]  # 上传弹窗的确定按钮
    nextstep = Locators.fourth_page_locators["nextstep"]  # 下一步按钮
    backstep = Locators.fourth_page_locators["backstep"]  # 上一步按钮

    def upload_button(self):
        """点击【上传】按钮"""
        self.click(self.upload_button1)   

    def upload_local(self):
        """在上传弹窗中继续点击【本地上传】按钮"""
        self.click(self.upload_t)

    def hand_js(self):
        """调用js方法,执行js脚本"""
        js = ‘document.querySelector("#i_select_files>input").style="";‘
        self.script(js)

    def true_upload(self):
        """去掉上传按钮隐藏属性后,传入文件"""
        self.send_keys(self.upload_true, "D:\\QQfile\qw.txt")

    def confirm_button(self):
        """点击【确定】关闭弹窗"""
        self.click(self.confirm)

    def next_step(self):
        """点击【下一步】,进入下一页面"""
        self.click(self.nextstep)

通过调用BasePage中的方法,来进一步编写这个页面用到的一些操作,最后在测试用例中根据业务场景来调用这些封装好的方法

2.编写测试用例

# coding: utf-8
# author: hmk

import unittest
import time
from pages.first_page import FirstPage
from pages.second_page import SecondPage
from pages.third_page import ThirdPage
from pages.fourth_page import FourthPage
from selenium import webdriver

class TestUni(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.url = "approveSeq=6578"
        # self.run = BasePage(self.driver)
        # self.run.open(self.url)
        cls.first = FirstPage(cls.driver)
        cls.first.open(cls.url)
        cls.second = SecondPage(cls.driver)
        cls.third = ThirdPage(cls.driver)
        cls.fourth = FourthPage(cls.driver)

    @classmethod
    def tearDownClass(cls):
        time.sleep(2)
        cls.driver = cls.driver
        cls.driver.quit()

    def test_01(self):
        time.sleep(6)
        self.driver.implicitly_wait(30)
        # self.first.click_agree_button()
        print(self.first.get_current_url())
        self.first.click_agree_button()

    def test_02(self):
        time.sleep(3)

        self.second.handle_js()
        # js = "var q = document.documentElement.scrollTop=1000"
        # self.driver.execute_script(js)
        self.driver.implicitly_wait(30)
        self.second.begin_deal()
        time.sleep(6)

    def test_03(self):
        self.third.handle_js()   #
        self.third.input_custName()
        self.third.input_custAddr()
        self.third.input_custLegalMan()
        self.third.input_custCerId()
        self.third.input_custContactPerson()
        self.third.input_custCardId()
        self.third.click_nextstep()
if __name__ == "__main__":    unittest.main()

在每个用例汇中调用page类中定义的操作方法,构建业务场景。

综合前面几篇内容,把如何根据page objects设计模式进行ui自动化测试的思路以及基本实现方法说了一遍,当然其中还有一些不足,后续功能可以自己根据需要添加(比如添加日志、添加每一步的断言、生成测试报告)



2018-05-11 15:56:42

原文地址:https://www.cnblogs.com/hanmk/p/9025136.html

时间: 2024-08-19 19:33:16

selenium+Page Objects(第三话)的相关文章

Selenium - WebDriver: Page Objects

This chapter is a tutorial introduction to page objects design pattern. A page object represents an area in the web application user interface that your test is interacting. Benefits of using page object pattern: Creating reusable code that can be sh

Page Objects设计模式步骤

page objects1.定义私有化final修饰的类变量2.类变量初始化(构造函数)3.by类变量定义,将查找元素的方式赋值给by类变量 By usernameLocator = By.id("username");4.为每个By类变量定义公有方法(get方法)5.定义页面操作方法,不写断言 有页面跳转的,返回一个其他页面对象 Methods return other PageObjects 6.测试用例 中直接用就好了

Selenium关于Page Objects

介绍页面对象设计模式.一个页面对象表示在你测试的web页面用户交互的界面. 使用页面对象模式的有点: 创建可重用的代码可以在多个测试用例中使用 减少重复的代码量 如果用户界面改变,只需要修改一个地方   1.Test case 下面的测试用例是在百度中搜索关键字,并返回相应的结果 import unittest from selenium import webdriver import page class BaiduSearch(uinttest.TestCase): def setUp(se

Python selenium —— 一定要会用selenium的等待,三种等待方式解读

发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法

selenium webdriver学习(三)---通过linktext定位

linktext就是链接文本,我们可以通过linktext来查找元素 一.问题场景 在html中,<a>标签代表的是链接,以csdn网站为例 以红框所示的为例,href代表的该链接被单击之后的跳转地址,selenium通过文本信息查找元素 二.代码实现 三.实现原理 1.首先打开相应的网址 2.通过文本信息定位到该链接 3.点击该链接,在新的界面打开csdn的博客链接 四.注意事项 由于找到链接之后,需要进行点击才能跳转,因此不要缺少点击的这个操作 五.类似方法 类似的还有partialLin

Selenium彩蛋篇-三种等待的使用方式

转: http://www.imdsx.cn/index.php/2017/07/27/ec/ 在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待,没一种等待都有自己的优点或缺点,如果选择最优的等待方式呢.来看下这三种等待方式吧. time(固定等待) 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以

selenium使用笔记(三)——元素定位

selenium进行自动化测试的一个很重要的东西那就是元素定位,如果元素都没法定位就无法操作它,也就无法进行自动化测试了.网上对于元素定位有很多的介绍,很详细很详细的,但是依然有很多新手总是会遇到无法定位的情况,在这里自己总结下元素定位. 先来看元素定位的方式 //使用id定位 userName = driver.findElement(By.id("TANGRAM__PSP_8__userName")); //使用class定位 userName = driver.findEleme

selenium page object

package demo; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class HomePage { public String base_url = "https://www.baidu.com/"; public Web

python selenium 元素定位(三)

上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到这个元素,我们从能对这个元素进行操作,那么我们下来看看如何来定位元素. selenium 提供了8中元素定位的方法(大家要学习元素的定位,首先可以学习下前端的基础知识,这样有利于我们学习自动化测试,大家可以看一下:http://www.runoob.com/) find_element_by_id