基于Selenium的Web自动化框架

这篇具有很好参考价值的文章主要介绍了基于Selenium的Web自动化框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先我们来看一下之前是如何书写页面模式中的类的:

BasePage:

class BasePage(object):
    """description of class"""

    #webdriver instance
    def __init__(self, driver):
        self.driver = driver

GoogleMainPage:

from BasePage import BasePage

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

class GoogleMainPage(BasePage):
    """description of class"""
    searchbox = (By.ID,'lst-ib')

    def inputSearchContent(self,searchContent):
        searchBox = self.driver.find_element(*self.searchbox)
        searchBox.send_keys(searchContent+Keys.RETURN)

重新审视之前的实现,我们可以发现在各个子类页面中,均需要引用相当的selenium类库(比如webdriver),并且需要用webdriver来定位页面元素,这就会造成各个子类页面与selenium类库有较多的集成,并且也是书写上的浪费。

现在来看一下做了结构调整的部分呈现:

BasePage:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

class BasePage(object):
    """description of class"""

    #webdriver instance
    def __init__(self, browser='chrome'):
        '''
        initialize selenium webdriver, use chrome as default webdriver
        '''

        if browser == "firefox" or browser == "ff":
            driver = webdriver.Firefox()
        elif browser == "chrome":
            driver = webdriver.Chrome()
        elif browser == "internet explorer" or browser == "ie":
            driver = webdriver.Ie()
        elif browser == "opera":
            driver = webdriver.Opera()
        elif browser == "phantomjs":
            driver = webdriver.PhantomJS()
        try:
            self.driver = driver
        except Exception:
            raise NameError("Not found %s browser,You can enter 'ie', 'ff' or 'chrome'." % browser)

    def findElement(self,element):
        '''
        Find element

        element is a set with format (identifier type, value), e.g. ('id','username')

        Usage:
        self.findElement(element)
        '''
        try:
            type = element[0]
            value = element[1]
            if type == "id" or type == "ID" or type=="Id":
                elem = self.driver.find_element_by_id(value)

            elif type == "name" or type == "NAME" or type=="Name":
                elem = self.driver.find_element_by_name(value)

            elif type == "class" or type == "CLASS" or type=="Class":
                elem = self.driver.find_element_by_class_name(value)

            elif type == "link_text" or type == "LINK_TEXT" or type=="Link_text":
                elem = self.driver.find_element_by_link_text(value)

            elif type == "xpath" or type == "XPATH" or type=="Xpath":
                elem = self.driver.find_element_by_xpath(value)

            elif type == "css" or type == "CSS" or type=="Css":
                elem = self.driver.find_element_by_css_selector(value)
            else:
                raise NameError("Please correct the type in function parameter")
        except Exception:
            raise ValueError("No such element found"+ str(element))
        return elem

    def findElements(self,element):
        '''
        Find elements

        element is a set with format (identifier type, value), e.g. ('id','username')

        Usage:
        self.findElements(element)
        '''
        try:
            type = element[0]
            value = element[1]
            if type == "id" or type == "ID" or type=="Id":
                elem = self.driver.find_elements_by_id(value)

            elif type == "name" or type == "NAME" or type=="Name":
                elem = self.driver.find_elements_by_name(value)

            elif type == "class" or type == "CLASS" or type=="Class":
                elem = self.driver.find_elements_by_class_name(value)

            elif type == "link_text" or type == "LINK_TEXT" or type=="Link_text":
                elem = self.driver.find_elements_by_link_text(value)

            elif type == "xpath" or type == "XPATH" or type=="Xpath":
                elem = self.driver.find_elements_by_xpath(value)

            elif type == "css" or type == "CSS" or type=="Css":
                elem = self.driver.find_elements_by_css_selector(value)
            else:
                raise NameError("Please correct the type in function parameter")
        except Exception:
            raise ValueError("No such element found"+ str(element))
        return elem

    def open(self,url):
        '''
        Open web url

        Usage:
        self.open(url)
        '''
        if url != "":
            self.driver.get(url)
        else:
            raise ValueError("please provide a base url")

    def type(self,element,text):
        '''
        Operation input box.

        Usage:
        self.type(element,text)
        '''
        element.send_keys(text)

    
    def enter(self,element):
        '''
        Keyboard: hit return

        Usage:
        self.enter(element)
        '''
        element.send_keys(Keys.RETURN)
    

    def click(self,element):
        '''
        Click page element, like button, image, link, etc.
        '''
        element.click()


    def quit(self):
        '''
        Quit webdriver
        '''
        self.driver.quit()


    def getAttribute(self, element, attribute):
        '''
        Get element attribute

        '''
        return element.get_attribute(attribute)

    def getText(self, element):
        '''
        Get text of a web element

        '''
        return element.text

    def getTitle(self):
        '''
        Get window title
        '''
        return self.driver.title

    def getCurrentUrl(self):
        '''
        Get current url
        '''
        return self.driver.current_url

    def getScreenshot(self,targetpath):
        '''
        Get current screenshot and save it to target path
        '''
        self.driver.get_screenshot_as_file(targetpath)

    def maximizeWindow(self):
        '''
        Maximize current browser window
        '''
        self.driver.maximize_window()

    def back(self):
        '''
        Goes one step backward in the browser history.
        '''
        self.driver.back()

    def forward(self):
        """
        Goes one step forward in the browser history.
        """
        self.driver.forward()

    def getWindowSize(self):
        """
        Gets the width and height of the current window.
        """
        return self.driver.get_window_size()

    def refresh(self):
        '''
        Refresh current page
        '''
        self.driver.refresh()
        self.driver.switch_to()

    
        

GoogleMainPage:

from BasePage import BasePage

class GoogleMainPage(BasePage):
    """description of class"""
    searchbox = ('ID','lst-ib')

    def __init__(self, browser = 'chrome'):
        super().__init__(browser)
        
    def inputSearchContent(self,searchContent):
        searchBox = self.findElement(self.searchbox)
        self.type(searchBox,searchContent)
        self.enter(searchBox)

Test

所做的改变:

  • 将与Selenium类库相关的操作做二次封装,放在BasePage中,其他子类页面自动继承相应的操作方法(如findelement,click等等)
  • 封装了findelement方法,可以根据页面元素的(类型,值)进行查找,只需要调用一个方法findelement(s),而不需要针对不同的类型调用不同的find方法(fine_element_by_xxxx())
  • 子类页面不需要引用selenium的类库,书写更加简单易读
  • 测试用例中也不需要引用selenium的任何类库,简单易读
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

基于Selenium的Web自动化框架,selenium,软件测试,程序员,接口测试,自动化测试,测试工程师

基于Selenium的Web自动化框架,selenium,软件测试,程序员,接口测试,自动化测试,测试工程师文章来源地址https://www.toymoban.com/news/detail-848312.html

到了这里,关于基于Selenium的Web自动化框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium基于Python web自动化测试框架 -- PO

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的

    2024年02月22日
    浏览(52)
  • 基于Selenium+Python的web自动化测试框架_pythonselenium框架

    主要负责执行用例后的生成报告,一般以HTML格式居多,信息主要是用例执行情况。另外还可以配置发送邮件功能。 4、log模块 主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。 三、自动化框架的设计和实现 1、需求分析 首先我们的测试对

    2024年04月17日
    浏览(54)
  • 基于Selenium的Web UI自动化测试框架开发实战

    1、自研自动化测试框架 首先进行需求分析。概要设计包括以下三大模块: 公共函数库模块(包括可复用函数库、日志管理、报表管理及发送邮件管理); 测试用例仓库模块(具体用例的相关管理); 可视化页面管理模块(单独针对Web页面进行抽象,封装页面元素和操作方

    2024年01月20日
    浏览(62)
  • Selenium Web自动化测试——基于unittest框架的PO设计模式

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 前面一直在讲接口自动化测试框架与案例分享,很少讲Selenium这个We

    2024年03月21日
    浏览(55)
  • Selenium:Web自动化框架

    Selenium(Web Browser Automation)的初衷是Web应用自动化测试。Selenium还广泛应用于爬虫,爬虫需要让浏览器自动运行网址来获取我们需要的内容 Selenium不是单个软件,它是由一系列的工具组成 Selenium库支持多种编程语言:Python、Java等,支持多种浏览器:Chrome、Firefox、Edge等,支持

    2024年02月07日
    浏览(36)
  • Selenium Web自动化测试框架实践

    目录        前言: 项目背景 功能实现 项目架构 浏览器driver定义 用例运行前后的环境准备工作 工具方法模块 Pageobject页面对象封装 执行测试用例        前言:          Selenium是一个基于Web的自动化测试框架,可以通过模拟用户在浏览器上的操作,来自动化地测试Web应

    2024年02月10日
    浏览(59)
  • WEB自动化测试(selenium工具)框架、面试题

                让程序员代替人为去验证web项目功能的过程      1)需求变动不频繁 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,

    2024年02月03日
    浏览(48)
  • Python+selenium,轻松搭建 Web 自动化测试框架

    在程序员的世界中,一切重复性的工作,都应该通过程序自动执行。 「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的业务要求,只能被企业逐步裁员淘汰。 「自动化测试

    2024年02月10日
    浏览(103)
  • selenium+python做web端自动化测试框架实战

    最近受到万点暴击,由于公司业务出现问题,工作任务没那么繁重,有时间摸索selenium+python自动化测试,结合网上查到的资料自己编写出适合web自动化测试的框架,由于本人也是刚刚开始学习python,这套自动化框架目前已经基本完成了所以总结下编写的得失,便于以后回顾温

    2024年02月14日
    浏览(47)
  • selenium进阶之web自动化项目框架搭建(Python版)

    1、项目结构 web自动化框架的设计,同接口自动化框架一样,采用分层设计。 文件或目录 说明 common 常用模块,常用的一些函数封装 testcases 用例模块,所有的测试用例 test_data 用例数据 logs 日志目录 reports 报告 settings.py 配置 main.py 项目入口 2、settings.py 3、main.py 4、commonlog

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包