Web自动化总结

一、工具:

selenium

二、元素定位:

方式一:通过元素的id 一个id值是唯一的,只属于一个元素

方式二:通过元素的class

方式三:通过元素的name

方式四:通过超链接文本by_link_text (是精确匹配,需要文本完全相同才能匹配)

方式五:通过超链接文本(模糊匹配)by_partial_link_text

方式六:通过元素标签tag_name

方式七:通过css选择器

方式八:xpath(万能,稳定,重点)

Xpath表达式:

xpath语法规则:

/  根节点,节点分隔符,   //任意位置

*  任意元素    @属性

.  当前节点  ..父级节点

text 文本值

格式:

属性://*[@属性='属性值']

文本值://*[text()='文本值']

高级查询:

contains模糊查询:contains(@属性/text(), 值)] 

starts-with 匹配一个属性开始位置的关键字

三、浏览器常用基本操作

刷新页面:  driver.refresh()

  获取浏览器窗口大小:driver.get_window_size()

  设置浏览器窗口大小:driver.set_window_size()

  浏览器最大化窗口:driver.maximize_window()

  浏览器全屏:driver.fullscreen_window()

  获取浏览器窗口个数:driver.get_window_handle

  len(driver.window_handles)

  切换到指定窗口: 先获取窗口列表:all_window=driver.window_handles

切换窗口参数:切换到第几个,索引从0开始:driver.switch_to.window(all_window[1])

  前进:driver.forward()

  后退:driver.back()

  关闭:driver.close() 关闭当前窗口

  退出:driver.quit()  完全退出浏览器

 关闭alert弹窗,confirm弹窗处理:driver.switch_to.alert.accept()

 driver.save_screenshot(‘./test.png’)截图

四、web自动化测试常见报错分析

1、检查元素的定位是否写正确

2、页面元素进行获取的时候查看是否已经加载出来,(等待时间)

3、元素在页面上不可见,需要拖动下拉框或者放大窗口

4、页面元素在iframe标签里面

5.元素需要切换到新窗口

6.元素隐藏(js元素隐藏属性更改为可见

五、切换frame


1.通过frame的名字
driver.switch_to.frame('frame_name')frame的名字
driver.switch_to.frame('login_frame')

2.通过索引
driver.switch_to.frame(1)索引从0开始
如何判断页面中有多个frame标签,并知道需要定位的frame标签是第几个?
答:可以在页面开发者工具中,CTRL+F 中输入//iframe,就可以显示所有iframe标签,切换标签后,
到哪个标签,目标位置显示蓝色,就是第几个。

3.通过webelement(元素定位的结果)
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="login_frame"]'))

4.通过id的值
driver.switch_to.frame('login_frame')

退出frame:如果在frame里面操作元素,再想回到主页面里面进行元素操作,就必须先退出当前的frame

driver.switch_to.default_content()

六、三种等待时间

1.强制等待
导入:from time import sleep
调用:sleep(3):强制等待3秒

2.隐式等待(implicitly_wait)

driver.implicitly_wait(10)
在10s时间内,页面加载完成,进行下一步操作

3.显式等待
导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
调用:
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[@rows="4"]')))
匿名函数:
WebDriverWait(driver,16).until(lambda x : x.find_element(By.XPATH,'//*[@rows="4"]')

七、键盘操作

所有的键盘操作都是通过 send_keys()里面通过改变参数实现的。

在使用键盘按键方法前需要先导入 keys 类包:

  from selenium.webdriver.common.keys import Keys

send_keys(Keys.BACK_SPACE)     删除键(BackSpace)

send_keys(Keys.SPACE)   空格键(Space)

send_keys(Keys.TAB)   制表键(Tab)

send_keys(Keys.COMMAND)   回退键(Esc)

send_keys(Keys.ENTER)   回车键(Enter)

send_keys(Keys.CONTROL,'a')   全选(Ctrl+A)

send_keys(Keys.CONTROL,'c')   复制(Ctrl+C)

send_keys(Keys.CONTROL,'x')   剪切(Ctrl+X)

send_keys(Keys.CONTROL,'v')    粘贴(Ctrl+V)

send_keys(Keys.F1)   键盘F1

send_keys(Keys.F5)  键盘F5

send_keys(Keys.F12)  键盘F12

八、鼠标操作

操作都包含在ActionChains 类中,所以要模拟鼠标操作是首先要导入ActionChains。

在使用鼠标操作前需要先导入ActionChains类包:

  from selenium.webdriver.common.action_chains import ActionChains

1. click( ele )  鼠标左键单击
2. context_click( ele )     鼠标右键单击
3. double_click( ele )     鼠标左键双击
4. drag_and_drop( source,target   拖动到某个元素后松开
5. move_to_element( ele )   鼠标悬停在一个元素上
6. click_and_hold( ele )   鼠标左键单击,不松开
7. release()  在某个元素上松开鼠标左键
8. perform()  执行上述鼠标操作

ActionChains类进行实例化对象操作,调用操作(元素)方法,再执行操作perform方法

 九、unittest测试框架

import unittest
from selenium import webdriver
from HTMLTestRunner import HTMLTestRunner  # 导入测试报告类


class Testcase(unittest.TestCase):
    # 类夹具
    @classmethod
    def setUpClass(self) -> None:
        self.driver = webdriver.Chrome()  # 获取驱动,打开浏览器

    # 方法夹具
    def setUp(self) -> None:
        self.driver.get('http://42.192.6.197/')

    def tearDown(self) -> None:
        self.driver.close()

    def tearDownClass(self) -> None:  # 关闭浏览器
        self.driver.quit()

    # 跳过测试用例
    @unittest.skip('不想运行')
    def test01(self):  # 测试用例必须以test开头
        self.driver.find_element_by_id('ws').send_keys('手机')
        self.driver.find_element_by_id('seg').click()

    @unittest.skipIf(3 > 2, '跳过')
    def test02(self):
        print("这是第二条测试用例")
        # 断言
        res = len(self.driver.find_elements_by_xpath(''))
        self.assertEqual(res, 3)


'''运行所有用例'''
# 运行当前py文件内所有继承而来unittest.TestCase的类里面的测试用例
unittest.main()

'''运行部分用例'''
# 运行(多个py文件)一个类/多个类的部分测试用例
if __name__ == '__main__':  # 快捷键:main回车,意义:放在if下面的代码,如果模块是被直接运行的,则代码块被运行,如果模块被import,则代码块不被运行。
    # 创建测试套件
    run_case = unittest.TestSuite()

    # 向测试套件内添加测试用例[测试类名1(测试用例名称1),测试类名2(测试用例名称2)]
    run_case.addTests([Testcase('test01'), Testcase('test02')])

    # 添加测试执行器TextTestRunner,调用run方法,需要传参数为需要执行的测试套件
    runner = unittest.TextTestRunner()
    runner.run(run_case)

# 运行多个测试类(跨多个py文件)的测试用例
# 1.导入其他文件的类 from 文件名 import 类名
# 2.在测试套件内添加测试用例即可

'''运行(多个py文件)一个类/多个类的所有测试用例'''
# 创建测试套件
run_case = unittest.TestSuite()

# 向测试套件内添加测试用例,实例化unittest.TestLoader()对象,调用方法loadTestsFromTestCase(Testcase)
# 并传入参数类名,如果有多个类,需重复添加
run_case.addTests(unittest.TestLoader().loadTestsFromTestCase(Testcase))

'''测试报告selenium+unittest+HTMLTestRunner'''
if __name__ == '__main__':

    run_case = unittest.TestSuite()

    run_case.addTests([Testcase('test01'), Testcase('test02')])
    # 1.定义报告路径。2.打开一个html文件,3.运行用例,测试结果写入到html文件
    # 定义测试报告生成路径:
    report_dir = './test_report.html'
    file = open(report_dir,'wb')
    # 通过HTMLTestRunner运行测试套件
    runner = HTMLTestRunner(
        title = '项目名称',
        description = 'xx模块自动化测试用例报告',
        stream=file
    )
    runner.run(run_case)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值