Python实现Selenium自动化Page模式

Selenium是当前主流的web自动化工具,提供了多种浏览器的支持(Chrome,Firefox, IE等等),当然大家也可以用自己喜欢的语言(Java,C#,Python等)来写用例,很容易上手。当大家写完第一个自动化用例的时候肯定感觉”哇...好牛x“,但是大家用余光扫了一下代码后,内心也许是崩溃的,因为太乱了!像这样:

__author__ = 'xua'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest

class TCRepeatLogin(unittest.TestCase):
  def setUp(self):

    #webdriver
    self.driver = webdriver.Chrome(r'C:\Users\xua\Downloads\chromedriver_win32\chromedriver.exe')
    self.driver.implicitly_wait(30)
    self.base_url = "http://10.222.30.145:9000/"

  def test_(self):
    driver = self.driver
    driver.get(self.base_url)

    #enter username and password
    driver.find_element_by_id("username").clear()
    driver.find_element_by_id("username").send_keys("sbxadmin")
    driver.find_element_by_id("password").clear()
    driver.find_element_by_id("password").send_keys("IGTtest1"+Keys.RETURN)

    #find dialog and check
    dialogTitle = driver.find_element(By.XPATH,'//html/body/div[7]/div/div/div[1]/h3')
    self.assertEqual("Sign in",dialogTitle.text)

    #find cancel button and click
    cancelBtn = driver.find_element(By.XPATH,'//html/body/div[7]/div/div/div[3]/button[2]')
    cancelBtn.click()

  def tearDown(self):
    self.driver.close()

if __name__ == "__main__":
  unittest.main()

从几点来分析下上边的代码:

1. 易读性:非常难理解。这么多find element?这难道也是test case?

2. 可扩展性:都是一个个孤立的test case,无扩展性可言

3. 可复用性:无公共方法,很难提到复用

4. 可维护性:一旦页面元素修改,则需要相应修改所有相关用例,effort大

基于以上的问题,Python为我们提供了Page模式来管理测试,它大概是这样子的:(TestCase中的虚线箭头应该是指向各个page,家里电脑没装修改软件,就不改了:))

关于Page模式:

1. 抽象出来一个BasePage基类,它包含一个指向Selenium.webdriver的属性

2. 每一个webpage都继承自BasePage基类,通过driver来获取本页面的元素,每个页面的操作都抽象为一个个方法

3. TestCase继承自unittest.Testcase类,并依赖相应的Page类来实现相应的test case步骤

利用Page模式实现上边的用例,代码如下:

BasePage.py:

__author__ = 'xua'

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

#super class
class BasePage(object):
  def __init__(self, driver):
    self.driver = driver

class LoginPage(BasePage):

  #page element identifier
  usename = (By.ID,'username')
  password = (By.ID, 'password')
  dialogTitle = (By.XPATH,'//html/body/div[7]/div/div/div[1]/h3')
  cancelButton = (By.XPATH,'//html/body/div[7]/div/div/div[3]/button[2]')

  #Get username textbox and input username
  def set_username(self,username):
    name = self.driver.find_element(*LoginPage.usename)
    name.send_keys(username)

  #Get password textbox and input password, then hit return
  def set_password(self, password):
    pwd = self.driver.find_element(*LoginPage.password)
    pwd.send_keys(password + Keys.RETURN)

  #Get pop up dialog title
  def get_DiaglogTitle(self):
    digTitle = self.driver.find_element(*LoginPage.dialogTitle)
    return digTitle.text

  #Get "cancel" button and then click
  def click_cancel(self):
    cancelbtn = self.driver.find_element(*LoginPage.cancelButton)
    cancelbtn.click()

Test_Login.py:

__author__ = 'xua'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
import unittest
import time
import BasePage

class Test_Login(unittest.TestCase):

  #Setup
  def setUp(self):
    self.driver = webdriver.Chrome(r'C:\Users\xua\Downloads\chromedriver_win32\chromedriver.exe')
    self.driver.implicitly_wait(30)
    self.base_url = "http://10.222.30.145:9000/"
  #tearDown
  def tearDown(self):
    self.driver.close()

  def test_Login(self):
    #Step1: open base site
    self.driver.get(self.base_url)
    #Step2: Open Login page
    login_page = BasePage.LoginPage(self.driver)
    #Step3: Enter username
    login_page.set_username("sbXadmin")
    #Step4: Enter password
    login_page.set_password("IGTtest1")
    #Checkpoint1: Check popup dialog title
    self.assertEqual(login_page.get_DiaglogTitle(),"Sign in")
    #Step5: Cancel dialog
    login_page.click_cancel()

if __name__ == "__main__":
  unittest.main()

Ok, 那么我们回头来看,Page模式是否解决了上边的四个方面的问题:

1. 易读性: 现在单看test_login方法,确实有点test case的样子了,每一步都很明了

2. 可扩展性:由于把每个page的元素操作都集成到一个page类中,所以增删改查都和方便

3. 可复用性: page的基本操作都变成了一个个的方法,在不同的test case中可以重复使用

4. 可维护性:如果页面修改,只需修改相应page类中的方法即可,无需修改每个test case

总结:

Page模式给我们提供了一个很好的页面和用例实现的分离机制,降低了耦合,提高了内聚,可以使我们在web自动化中做到游刃有余。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • selenium+python自动化测试之页面元素定位

    上一篇博客selenium+python自动化测试(二)–使用webdriver操作浏览器讲解了使用webdriver操作浏览器的各种方法,可以实现对浏览器进行操作了,接下来就是对浏览器页面中的元素进行操作,操作页面元素,首先要找到操作的元素,对元素进行定位 查看页面源码 要定位页面元素,需要找到页面的源码,IE浏览器中,打开页面后,在页面上点击鼠标右键,会有"查看源代码"的选项,点击后就会进入页面源码页面,在这里就可以找到页面的所有元素 使用Chrome浏览器打开页面后,在浏览器的地

  • Python实现Selenium自动化Page模式

    Selenium是当前主流的web自动化工具,提供了多种浏览器的支持(Chrome,Firefox, IE等等),当然大家也可以用自己喜欢的语言(Java,C#,Python等)来写用例,很容易上手.当大家写完第一个自动化用例的时候肯定感觉"哇...好牛x",但是大家用余光扫了一下代码后,内心也许是崩溃的,因为太乱了!像这样: __author__ = 'xua' from selenium import webdriver from selenium.webdriver.common

  • 一篇文章带你了解Python之Selenium自动化爬虫

    目录 Python之Selenium自动化爬虫 0.介绍 1.安装 2.下载浏览器驱动 3.实例 4.开启无头模式 5.保存页面截图 6.模拟输入和点击 a.根据文本值查找节点 b.获取当前节点的文本 c.打印当前网页的一些信息 d.关闭浏览器 e.模拟鼠标滚动 7.ChromeOptions 8.验证滑块移动 9.打开多窗口和页面切换 10.Cookie操作 11.模拟登录 12.使用代理 14.更换UA 15.鼠标悬停 16.优缺点 总结 Python之Selenium自动化爬虫 0.介绍

  • 全网最全python库selenium自动化使用详细教程

    一.安装selenium pip install Selenium 二.初始化浏览器 Chrome 是初始化谷歌浏览器 Firefox 是初始化火狐浏览器 Edge 是初始化IE浏览器 PhantomJS 是一个无界面浏览器. from selenium import webdriver driver = webdriver.Chrome() 三.设置浏览器大小 maximize_window 最大化窗口 set_window_size 自定义窗口大小 from selenium import

  • python+opencv+selenium自动化登录邮箱并解决滑动验证的问题

    前言 大家做自动化登录时可能都遇到过滑块验证码需要手动验证的问题,这次我们就来解决他 如下:    在我们做自动化登录时,总会遇到各种奇奇怪怪的验证码,滑块验证码就是其中最常见的一种.若我们的程序自动输入账号密码之后,还需要我们人工去滑动验证码那还能称得上是自动化吗? 那么先给大家说一下我的'解题步骤'. 1.使用selenium打开邮箱首页. 2.定位到账号密码框,键入账号密码. 3.获取验证图片,使用opencv处理返回滑块应拖动的距离. 4.创建鼠标事件,模拟拖动滑块完成验证.   需要解

  • Python之Selenium自动化浏览器测试详解

    目录 Python之Selenium(自动化浏览器测试) 1.安装selenium 2.下载对应版本的浏览器驱动 3.测试code,打开一个网页,并获取网页的标题 4.一个小样例 总结 Python之Selenium(自动化浏览器测试) 1.安装selenium pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 2.下载对应版本的浏览器驱动 http://npm.taobao.org/mirrors/chromedr

  • python基于Selenium的web自动化框架

    1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览

  • python+selenium自动化框架搭建的方法步骤

    环境及使用软件信息 python 3 selenium 3.13.0 xlrd 1.1.0 chromedriver HTMLTestRunner 说明: selenium/xlrd只需要再python环境下使用pip install 名称即可进行对应的安装. 安装完成后可使用pip list查看自己的安装列表信息. chromedriver:版本需和自己的chrome浏览器对应,百度下载. 作用:对chrome浏览器进行驱动. HTMLTestRunner:HTMLTestRunner是Pyt

  • Python+Selenium自动化环境搭建与操作基础详解

    目录 一.环境搭建 1.python安装 2.pycharm下载安装 3.selenium下载安装 4.浏览器驱动下载安装 二.Selenium简介 (1)SeleniumIDE (2)SeleniumRC (3)SeleniumWebDriver (4)SeleniumGrid 三.常用方法 1.浏览器操作 2.如何获取页面元素 3.查找定位页面元素的方法 4.操作方法 5.下拉框操作 6.WINDOS弹窗 7.iframe内嵌页面处理 8.上传文件 9.切换页面 10.截图 11.等待时间

  • 学习Python selenium自动化网页抓取器

    直接入正题---Python selenium自动控制浏览器对网页的数据进行抓取,其中包含按钮点击.跳转页面.搜索框的输入.页面的价值数据存储.mongodb自动id标识等等等. 1.首先介绍一下 Python selenium ---自动化测试工具,用来控制浏览器来对网页的操作,在爬虫中与BeautifulSoup结合那就是天衣无缝,除去国外的一些变态的验证网页,对于图片验证码我有自己写的破解图片验证码的源代码,成功率在85%. 详情请咨询QQ群--607021567(这不算广告,群里有好多P

  • Python + selenium自动化环境搭建的完整步骤

    前言 本文主要介绍了关于Python+selenium自动化环境搭建的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 Python +selenium+googledriver 小白的血泪安装使,不停的总结写心得是理解透彻的毕竟之路 一,python的安装: 首先去Python的官网下载安装包:https://www.python.org/  ,大家也可以通过我们进行下载://www.jb51.net/softs/415916.html 2.下载完成后如下图所示 3.双

随机推荐