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()
  • 相关阅读:
    java程序高CPU,如何直接定位(linux系统下命令行操作)
    HashMap源码解读(jdk1.8)
    mysql索引原理
    redis常见问题
    Bitmap算法
    list遍历时删除的坑
    接口和抽象类有什么区别?各在什么场景下使用?
    记录BigInteger犯过的一个错误
    CentOS7切换源
    map遍历性能记录
  • 原文地址:https://www.cnblogs.com/jingdenghuakai/p/11701122.html
Copyright © 2011-2022 走看看