zoukankan      html  css  js  c++  java
  • selenium基础(获取验证信息-断言)

    获取验证信息

    • 实际结果与预期结果进行比较称之为断言
    • 通过获取title、URL、text等信息进行断言
    • text方法用于获取标签对之间的文本信息
    from selenium import webdriver
    import time
    
    driver=webdriver.Firefox()
    driver.maximize_window()
    driver.get("https://www.baidu.com")
    driver.find_element_by_id('kw').send_keys('selenium')
    driver.find_element_by_id('su').click()
    time.sleep(2)
    text=driver.find_element_by_class_name('nums_text').text
    #判断结果是否正确,如果不正确截图
    if '百度23523找到相关结果约' in text:
        print("pass")
    else:
        driver.get_screenshot_as_file('D:\test.png')
        print('error')
    driver.quit()

     assert断言方法

    python assert断言是声明布尔值必须为真的判定,如果发生异常就说明表达式为假。
    可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
    • self.assertEqual(a,b,msg=msg)   #判断a与.b是否一致,msg类似备注,可以为空
    • self.assertNotEqual(a,b,msg=msg)  #判断a与b是否不一致
    • self.assertTrue(a,msg=none)    #判断a是否为True
    • self.assertFalse(b,msg=none)   #判断b是否为false
    • self.assertIn(a,b) 判断a in b是否成立,正确则True,否则为False

    例: assertIn(“2” in “23”)  成功

    assertIn(“1” in “23”)  失败

    • self.assertNotIn(a,b) 判断a in b是否成立,不成立则True 否则 False

    例:assertIn(“2” in “23”)  失败

     assertIn(“1” in “23”)  成功

    • self.assertIs(a,b) 判断a 与b的对象是否相同,成立则True,否则False

    注,判断是否同一对象  id(a) 若id相同,则为同一对象

    例 a,b=1,1.0

      assertls(a,b)  失败

    a,b=1,1

    assertls(a,b)  成功

    • self.assertIsNot(a,b) 判断a 与b的对象是否相同,不成立True,否则False
    • self.assertDictEqual(a,b) #判断字典a和字典b是否相等,a,b为字典
    • self.assertDictContainsSubset
    • self.assertItemsEqual(a,b) #比较两字符串是否一致,同sorted(a)==sorted(b)

    注:sorted排序,方法内部为,将a,b分别list,生成各自列表,在sorted排序在比对

    • self.assertMultiLineEqual(a,b) #比较a文本与b文本是否一致,即便多了个换行,也会区分
    • self.assertLess(a,b) #判断a<b 成立则通过,否则失败
    • self.assertLessEqual  #判断a<=b 成立则通过,否则失败
    • self.assertGreater  #判断a>b 成立则通过,否则失败
    • self.assertGreaterEqual  #判断a>=b 成立则通过,否则失败
    • self.assertIsNone(obj=””) #判断obj=None 成立则通过,否则失败
    • self.assertIsNotNone #判断obj=None 成立则失败,否则通过
    • self.assertIsInstance(a,b) #判断a的数据类型是否为b,isinstance(a,b) 成立则通过,否则失败
    • self.assertNotIsInstance  #判断同上相反
    • self.assertRaisesRegexp  #正则判断匹配,没仔细看,过程复杂
    • self.assertRegexpMatches(a,b) #正则匹配 同re.search(b,a)匹配有则成功,否则失败

    注:a为匹配的正则表达式,必须字符型,b 为要匹配的内容

    • self.assertNotRegexpMatches #同上,判断相反
    • self.assertAlmostEqual(a,b,places=none,msg=none,delta=none)   #该判断过程有点复杂,判断过程如下

    注:places与delta不能同时存在,否则出异常

      #若a==b,则直接输入正确,不判断下面的过程

      #若delta有数,places为空,判断a与b的差的绝对值是否<=delta,满足则正确,否则错误

      #若delta为空,places有数,判断b与a的差的绝对值,取小数places位,等于0则正确,否则错误

      #若delta为空,places为空,默认赋值places=7判断

    例 assertAlmostEqual(2,2) 正确,

       assertAlmostEqual(5,2,delta=4) 正确

       assertAlmostEqual(5,2,delta=2) 错误

       assertAlmostEqual(2,2.005,places=1) 正确

       assertAlmostEqual(2,2.05,places=3) 错误

    • self.assertNotAlmostEqual(a,b,places=none,msg=none,delta=none)  同上,但判断相反

    注,delta与places不能同时存在,否则抛出异常

    例  assertNotAlmostEqual(2,2) 错误

    assertNotAlmostEqual(a,b,delta=c)  #a不等于b 同时 a-b>c 则正确,否则错误

    assertNotAlmostEqual(a,b,places=2)

    #a不等于b 同时|b-a|*0,01 不等于0 则正确,否则错误

    如何为assert断言语句添加异常参数

    assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:

    assert expression [, arguments] 
    assert 表达式 [, 参数]

    assert len(lists) >=5,'列表元素个数小于5'
    assert 2==1,'2不等于1'

     

    unittest

    Python自带的unittest单元测试框架就有了自己的断言方法self.assertXXX(),而且不推荐使用assert XXX语句。

    selenium 三种断言以及异常类型

     

    selenium 提供了三种模式的断言:assert 、verify、waitfor
      Assert 失败时,该测试将终止。
      Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上
      Waitfor 用于等待某些条件变为真。可用于 AJAX 应用程序的测试。

      如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超过时间。一般跟setTimeout时间一起使用

    断言常用的有:

    assertLocation(判断当前是在正确的页面)、

    assertTitle(检查当前页面的 title 是否正确)、
    assertValue(检查 input 的值, checkbox 或 radio,有值为”on”无为”off”)、
    assertSelected(检查 select 的下拉菜单中选中是否正确)、
    assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
    assertText(检查指定元素的文本)、
    assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
    assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
    assertAttribute(检查当前指定元素的属性的值)、
    assertTable(检查 table 里的某个 cell 中的值)、
    assertEditable(检查指定的 input 是否可以编辑)、

    assertNotEditable(检查指定的 input 是否不可以编辑)、
    assertAlert(检查是否有产生带指定 message 的 alert 对话框)、
    verifyTitle (检查预期的页面标题)
    verifyTextPresent (验证预期的文本是否在页面上的某个位置)
    verifyElementPresent(验证预期的UI元素,它的HTML标签的定义,是否在当前网页上)
    verifyText(核实预期的文本和相应的HTML标签是否都存在于页面上)
    verifyTable(验证表的预期内容)
    waitForPageToLoad(暂停执行,直到预期的新的页面加载)
    waitForElementPresent (等待检验某元素的存在。为真时,则执行。)

    验证和断言的区别:验证失败后不影响脚本的继续执行,断言失败后将停止脚本的执行。

    异常类型

    AssertionError:assert语句失败

    AttributeError:试图访问一个对象没有的属性

    IOError:输入输出异常,基本是无法打开文件

    ImportError:无法引入模块或者包,基本是路径问题

    IndentationError:语法错误,代码没有正确的对齐

    IndexError:下标索引超出序列边界

    KeyError:试图访问字典里不存在的键

    KeyboadrInterrupt:Ctrl+c被按下

    NameError:使用一个还未赋值对象的变量

    SyntaxError:python代码逻辑语法错误,不能执行

    TypeError:传入的对象类型与要求不符

    UnboundLocalError:试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问

    ValueError:传入一个不被期望的值,即使类型正确

    在unittest单元测试框架中,TestCase类提供了一些方法来检查并报告故障

    import unittest
    
    class Assert_test(unittest.TestCase):
    
        def test_case(self):
            num = int(input("Enter a number"))
            try:
                self.assertEqual(num,10)#判断两个数值是否相等
            except AssertionError:
                print('这个数字不是10')
    
    if __name__ == "__main__":
        unittest.main()
  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/jingdenghuakai/p/11701122.html
Copyright © 2011-2022 走看看