精华内容
下载资源
问答
  • 虽然在2017年已经开始接触了selenium,期间是断断续续执行自动化测试,因为还有其他测试任务,培训任务要执行…前期建议大家能够学习python基本语法(python基础教程)任务搭建自动化测试框架,并能有效方便的进行...

    背景

    为了更好的发展自身的测试技能,应对测试行业以及互联网行业的迭代变化。自学python以及自动化测试。

    虽然在2017年已经开始接触了selenium,期间是断断续续执行自动化测试,因为还有其他测试任务,培训任务要执行…

    前期建议大家能够学习python基本语法(python基础教程)

    任务

    搭建自动化测试框架,并能有效方便的进行测试,维护成本也要考虑其中。

    过程

    我的自动化框架可能不成熟,因为是自学的。请多包涵。也请大佬指导~

    20190317092204798.png

    common

    包含:基本的公共方法类,比如HTML报告、Log处理、发送邮件、基本页面对象等

    其中pageObject里面是对各个测试系统操作页面的一个封装,以后用例的方法直接继承即可。可多次调用,维护起来比较方便。

    conf

    基本的系统参数配置信息,可以包含url,正确用户的信息,简单日志级别,某些输出位置,邮件信息等

    data

    对于数据驱动或者其他测试用例中需要测试的数据,之后测试用例流程不变,可以直接在文档中进行测试数据的修改。暂时采用excel。也可以采用csv,xml等等方法

    log

    日志输出,暂时包括了 log输出,htmlreport输出以及img的保存。

    test

    其中包含testcase以及testsuite两个模块

    testcase 负责编写测试用例如果某个功能有多个py文件编写可以再新建一个目录。

    testsuite 就是测试套件,可以按需求进行选择需要的测试项(包含测试用例以及测试类)

    注意:使用ddt则不可以再使用addTest方式单独添加测试用例了。

    1

    代码部分

    - common中的BasePage

    class BasePage():

    global logg

    logg = LogHandler().logger

    def __init__(self,driver,url=None):

    self.wd = driver

    self.wd.implicitly_wait(5)

    self.actions = ActionChains(self.wd)

    if url :

    self.url = url

    else:

    self.url = self.server_url_conf()

    #浏览器行为的一些方法

    def get_conf_url(self):

    self.wd.get(self.url)

    self.wd.maximize_window()

    logg.debug("enter conf_url : " + str(self.url))

    def brower_close(self):

    return self.wd.close()

    def brower_quit_all(self):

    return self.wd.quit()

    ... 下面还有刷新,前进后退等

    #定位 这里通过 By.xx 方法

    def find_web_element(self,*loc):

    #self.wd.find_element(*loc)

    return self.wd.find_element(*loc)

    #元素操作

    def type_text(self,loc,text):

    return self.wd.find_element(*loc).send_keys(text)

    def clear_text(self,*loc):

    return self.wd.find_element(*loc).clear()

    def submit_func(self,*loc):

    return self.wd.find_element(*loc).submit()

    def click_btn(self,*loc):

    return self.wd.find_element(*loc).click()

    #鼠标相关

    def mouse_move_to_element(self,*loc):

    elem = self.find_web_element(*loc)

    self.actions.move_to_element(elem).perform()

    ... 下面还有点击,双击,右击的一些方法

    #获取信息行为

    def get_web_url(self):

    return self.wd.current_url

    def get_title(self):

    return self.wd.title

    def get_element_text(self,*loc):

    return self.find_web_element(*loc).text

    #元素是否存在 是 True

    def check_element_isexist(self,loc):

    isexist = False

    try:

    EC.presence_of_element_located(loc)(self.wd)

    isexist = True

    except Exception as e:

    isexist = False

    logg.debug(' isexist or not :',exc_info = True)

    return isexist

    def check_element_has_text(self,loc,text):

    pass #省略

    def check_element_isdisplayed(self,*loc):

    pass #省略

    #生成图

    def __inser_img(self,passorfailed,imgname):

    time_loc = time.strftime("%m%d_%H%M%S",time.localtime())

    file_path = os.path.abspath(__file__)

    file_path = os.path.join(file_path+"/../../log/%s_%s.png" %(imgname,time_loc))

    self.wd.get_screenshot_as_file(file_path)

    logg.debug('insert_%s_img %s ' %(passorfailed,(file_path)))

    def insert_error_img(self,imgname):

    self.__inser_img("error",imgname)

    def insert_success_img(self,imgname):

    self.__inser_img("success",imgname)

    def insert_debug_img(self,imgname):

    self.__inser_img("debug",imgname)

    def server_url_conf(self):

    self.host = readconfig.ReadConfig().getserver('host')

    self.port = readconfig.ReadConfig().getserver('port')

    urlvalue = self.host + ":" + self.port

    return urlvalue

    if __name__ == '__main__':

    test = BasePage(webdriver.Chrome())

    test.get_conf_url()

    common中登录页的页面对象

    包含了页面的一些方法比如

    输入用户名,输入密码,点击登录

    test中的 logintestcase

    则直接使用 登录页面对象的 输入用户名,输入密码,点击登录即可

    后期维护,如果元素变动,则只需要修改页面对象代码而对用例则无需修正

    class AioLogin(BasePage):

    global logg

    logg = LogHandler().getlog()

    username_loc = (By.NAME, "username")

    password_loc = (By.CSS_SELECTOR, "input[type='password']")

    login_loc = (By.CLASS_NAME, "login-btn")

    login_loc_oem = (By.ID,"submit")

    check_login_loc = (By.CLASS_NAME,"error-tip")

    elements = [username_loc,password_loc,login_loc,check_login_loc]

    log_menu = (By.CSS_SELECTOR,"[name='log']")

    logg.debug(elements)

    def set_username(self,username):

    self.clear_text(*self.username_loc) #直接使用BasePage的方法

    self.type_text(self.username_loc,username)

    logg.info('Enter username: ' + username)

    sleep(0.1)

    ... 其他

    logintest

    这里使用了ddt数据驱动方法

    from ddt import data,ddt,unpack

    @ddt

    class TestLogin(unittest.TestCase):

    global logg

    logg = LogHandler().getlog()

    @classmethod #该类方法,执行中只会启动一次。区别于setUp的 每个用例都执行一遍

    def setUpClass(cls):

    cls.test = aiologinpage.AioLogin(webdriver.Chrome())

    cls.test.get_conf_url()

    # print('start TestSearch')

    @classmethod

    def tearDownClass(cls):

    # TestLogin().logg.info("brower quit")

    TestLogin().test.brower_close()

    pass

    logindata = ReadExcel().getValue('login')

    @data(*logindata)

    @unpack #当有多组数据时,需要unpack

    def testcase2(self,username,passwd,result):

    logg.info(username+" " + passwd +" " +str(result))

    self.test.set_username(username) #用例直接使用登录页面对象,后期除了修改测试用例,否则无需变动

    self.test.set_password(passwd)

    self.test.type_login_btn()

    # 断言登录结果和预期结果是否一致

    self.assertTrue(self.test.check_login_result(result),

    msg="\r login_test fail \r username :%s \r passwd : %s " %(username,passwd))

    if __name__ == '__main__':

    unittest.main()

    其他页面

    比如我有个 创建设备分组的页面

    我必须要先登录才可以执行下面的操作

    此时,可以从conf中获取成功登录的用户名和密码,把correct_login方法写在登录页面对象中。

    def correct_login(self):

    self.get_conf_url()

    self.userpasswd = self.correct_userpasswd_conf()

    self.set_username(self.userpasswd[0])

    self.set_password(self.userpasswd[1])

    self.type_login_btn()

    之后,其他页面初始化时候直接调用这个correct_login即可登录

    测试套件添加方法

    TestSuite方法

    #添加一个类

    st1 = unittest.makeSuite(TestLogin)

    #单独添加多个用例

    st = unittest.TestSuite(map(TestClassName,[‘testcase1',‘testcase2']))

    st = unittest.TestSuite(TestClaseeName(‘testcase1'))

    #添加一个或者多个测试用例

    st2 = unittest.TestSuite()

    st2.addTests(map(TestCaseClassName,[‘testcase2',‘testcase1']))

    st2.addTest(TestCaseClassName(‘testcase1'))

    #添加一个类

    st2.addTest(unittest.makeSuite(TestClassName))

    TestLoader 方法

    discovery 发现脚本

    st = unittest.TestLoader().discovery(“dir_path”,pattern=“a*.py”)

    #loadTestFromTestCase 加载 测试类

    st1 = unittest.TestLoader().loadTestsFromTestCase(TestLoginCheck)

    st2 = unittest.TestLoader().loadTestsFromTestCase(TestLogin)

    stt = unittest.TestSuite()

    stt.addTests([st1,st2])

    本文标题: python3+selenium自动化测试框架详解

    本文地址: http://www.cppcns.com/jiaoben/python/254487.html

    展开全文
  • 自动化测试脚本开发中,经常会用到异常处理,本文通过try except语句块进行断言测试。 例:判断百度首页是否有id为“kw”的元素(其实为百度的搜索输入框)。 代码如下:from selenium import webdriver driver ...

    在自动化测试脚本开发中,经常会用到异常处理,本文通过try except语句块进行断言测试。
    例:判断百度首页是否有id为“kw”的元素(其实为百度的搜索输入框)。
    代码如下:

    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(6)
    
    driver.get("https://www.baidu.com")
    # 通过try except语句块来进行测试断言
    # 在实际自动化测试脚本开发中,经常要用到处理异常
    try:
        driver.find_element_by_id("kw")
        print("test pass: ID found")
    except Exception as e:
        print("Exception found", format(e))
    
    driver.quit()

    运行完,控制台显示如下:
    这里写图片描述
    若将代码改为:

    driver.find_element_by_id("k1w")

    此时运行控制台显示为:
    这里写图片描述

    展开全文
  • 由于selenium ide转化的脚本并未包含检查点,故我们使用unittest搭建selenium自动化测试套件中可以使用unittest的断言来检查结果是否符合我们的要求: 最常用的断言如下: 1.相等断言:assertEqual(self, first,...

    由于selenium ide转化的脚本并未包含检查点,故我们使用unittest搭建selenium的自动化测试套件中可以使用unittest的断言来检查结果是否符合我们的要求:

    最常用的断言如下:

    1.相等断言:assertEqual(self, first, second, msg=None)  常用于title和url的对比来检查是否与预期结果一致;

     self.assertEqual(u'用户 - Delicate Cloud Dashboard', driver.title, 'switch to Admin_Identity_User panel fail')

    2.不等断言:assertNotEqual(self, first, second, msg=None)  与1相反,此断言不常用;

    3.True断言:assertTrue(self, expr, msg=None)     此断言可用于对寻找某元素的表达式进行判断,如返回True则通过,否则Fail;

    4.False断言:assertFalse(self, expr, msg=None)    此断言可用于对寻找某元素的表达式进行判断,如返回False则通过,否则Fail;

    3和4可以配合使用selenium IDE所生成的python脚本中is_element_present和is_alert_present来使用;

    展开全文
  • selenium自动化断言_0.03

    千次阅读 2019-01-25 17:47:50
    断言: 验证应用程序的状态是否同所期望的一致。...verify断言失败时,该测试将继续执行,并将错误记入日志显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。提高脚本的伸缩性   waitfor...

    断言:

    验证应用程序的状态是否同所期望的一致。常见的断言包括验证页面内容,如标题是否为指定,或当前位置是否正确等

     

    断言被用于4种模式+5种手段:

    Assert

    Assert 断言失败时,该测试将终止

     

    verify

    verify断言失败时,该测试将继续执行,并将错误记入日志显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。提高脚本的伸缩性

     

    waitfor

    waitfor 用于等待某些条件变为真,可用于 AJAX 应用程序的测试。如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。知道超过当前所设定的超时时间。一般跟setTimeout时间一起用

    (AJAX程序:如百度地图的放大缩小。AJAX(异步javaScript 和 XML),指一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新)

     

    store

    store定义变量,可以获取页面的相关元素进行判断

     

    5种手段:

    Title 获取页面的标题

    Value 获取元素的值

    Text 获取元素文本信息

    Table 获取元素标签

    ElementPresnt 获得当前元素

     

    断言常用的有:

    assertTitle(检查当前页面的title 是否正确)

    assertValue(检查输入框的值,单选或复选框的值)

    VerifyValue() 验证元素的值

     

     

     

     

    展开全文
  • 洞见 SELENIUM 自动化测试

    千次阅读 2018-02-24 14:05:39
    洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多。有的团队知道怎么做...
  • 在测试用例中,执行完测试用例后,最后一步是判断测试结果是pass还是fail,自动化测试脚本一般把这种生成测试结果的方法称为断言(assert)。 断言,能够验证应用程序的状态是否同所期望的一致,提供了测试结果是...
  • 此时无论flag是True或False,生成的测试报告均通过,虽然在生成报告的结果中可以看到断言结果是Test Pass还是Test Fail ![图片说明](https://img-ask.csdn.net/upload/201709/11/1505115151_307365.png) 目前我采用...
  • selenium自动化测试框架PO设计模式

    万次阅读 多人点赞 2019-06-21 22:20:54
    整理一下 selenium 自动化测试实践中使用较多的 PO(PageObject)设计模式 面向对象的特性:封装\继承\多态.在自动化中一样适用,selenium 自动化测试中有一个名字常常被提及 PageObject(思想与面向对象的特性相同),...
  • 一、判断页面的title其中expected_conditions...首先导入expected_conditions模块,并重命名EC方便以后调用from selenium.webdriver.support import expected_conditions as EC2.打开百度,利用EC.title_is(u'百度一...
  • Selenium是用于web自动化测试的工具,这次来介绍一下它的使用。 Selenium由好几部分组成,我们今天主要说的是它的WebDriver部分,这部分需要测试者自己编写脚本代码。 一、首先来介绍一下它的Jav...
  • 1、是一种浏览器自动化测试框架 2、用于web应用程序的自动化测试 Selenium 1.0 的工作原理 Selenium 1.0 组成: (1)Selenium IDE: 一个firefox的plug-in,可以录制和回放并保存test cases,测试用例为html格式 ...
  • Selenium自动化测试框架 Selenium工作原理 selenium环境搭建材料 Selenium IDE Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。它提供了一个图形用户界面,用于记录使用Fire...
  • python+selenium自动化测试-1概述

    千次阅读 2019-09-09 14:23:27
    selenium自动化测试差不多两年了,有很多心得体会。在回归测试方面,selenium有很大的优势,一定程度上代替了手工测试,让我有更多时间关注项目业务和其他测试技术。 学自动化技术至少要掌握以下几个步骤:获取...
  • selenium 提供了三种模式的断言:assert、verify、waitforassert 失败时,该测试将终止。verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上waitf....
  • 自动化测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败, 在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果,...
  • 自动化测试一些理论 自动化测试适合:兼容性测试和回归测试 原理:脚本控制Webdriver,Webdriver控制浏览器 Selenium的特点:轻量级、支持多语言、支持多平台、支持多浏览器、支持分布式测试 常用 Webdriver API ...
  • 本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。1.Selenium介绍Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化...
  • Selenium自动化测试基于Python

    千次阅读 2020-09-25 15:31:56
    Selenium是一个主要用于Web应用程序自动化测试的工具集合,在行业内已经得到广泛的应用。介绍了如何用Python语言调用Selenium WebDriver接口进行自动化测试。主要内容为:基于Python 的 SeleniumWebDriver 入门知识...
  • 距离上次写博客(2018年04月01日发布了博客《QTP自动化测试实践-01》)大概过去了一个月的时间,这期间学完了Selenium自动化测试理论并做了一些练习,这期间的学习成果,在此记录一下~ 首先说明一下,以下针对的是...
  • Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium RC, WebDriver, IDE, GridPython+selenium环境版本选择...
  • Selenium 自动化测试从零实战

    万次阅读 2017-11-20 16:11:49
    作者简介本文作者就职于中科软科技股份有限公司高级测试工程师-王海宝(勇气老师),3年以上软件测试经验,擅长接口测试、自动化测试,对分布式测试有独到的见解,擅长测试分析。下面一起看看勇气老师如何带大
  • python3+selenium 自动化测试框架初探

    千次阅读 2019-03-17 10:06:29
    python3+selenium 自动化测试框架初探 首先,对于软件测试行业的人员技术发展。我的个人看法是:不能一味的追求自动化测试、性能测试、压力测试的技术,而忽略了功能测试 不过对于大公司肯定是各司其职效率上肯定会...
  • Java+Selenium 自动化测试-用Java断言

    千次阅读 2019-06-14 16:00:36
    断言:即执行test case 判断期望结果跟预期结果是否一致。 findElements先找出此元素个数,如果大于0,则说明存在; isDisplayed() 判断显示没有,如已显示用getText获取内容,再用equals比较内容是否一致 ××...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,812
精华内容 2,324
关键字:

selenium自动化测试断言