UI自动化1

UI自动化测试1

1、UI自动化测试环境搭建

UI自动化测试的技术栈: 1、编程语言(oop) 2、单元测试框架UnitTest 3、数据驱动(测试的数据分离到文件中) 4、参数化 5、selenium WEB测试框架 6、页面对象设计模式 7、持续集成

自动化测试:自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB(APP)来进行操作。

selenium:是WEB的UI测试框架,可以和主流的编程语言(Python,Java,Net,PHP,JavaScript)整合来测试WEB系统,同时也是支持主流的浏览器(IE,Firefox,Chrome)。Selenium通过driver的驱动方式来操作浏览器,对浏览器进行各种交互式的验证(点击,输入,下拉框选项。。。)

Selenium环境搭建步骤: 1、按照selenium :pip install selenium 2、安装Chrome浏览器 3、下载driver的驱动,并且把数据配置到path的环境变量 A、driver的驱动要与浏览器的版本完全匹配(99%) B、把driver的应用程序放在python的安装目录下 https://registry.npmmirror.com/binary.html?path=chromedriver/

2、UI自动化测试概述

webdriver之所以能够操作浏览器,是因为他首先需要定位到被操作的元素属性,然后就可以对浏览器做各种操作。

3、元素定位分类

在selenium框架中,操作元素定位使用的类是By,里面方法有8种, 那么也就是说,定位页面的元素属性方法有8种,分别是: ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"

3.1单个元素定位

a标签下的都是超链接

input标签下的都是输入框

3.1.1一般定位元素属性

3.1.1.1 ID
 from selenium import webdriver
 import time as t
 
 #实例化webdriver,并且指定要测试的浏览器
 driver=webdriver.Chrome()
 #打开浏览器导航到百度
 driver.get('https://www.baidu.com')
 #send keys是输入的方法(通过ID属性定位到百度的搜索输入框,并且输入搜索的关键字)
 driver.find_element_by_id('kw').send_keys('UI自动化')
 t.sleep(3)
 #退出浏览器
 driver.quit()

 

 

3.1.1.2 name
 '''name'''
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_name('wd').send_keys('UI自动化')
 t.sleep(3)
 driver.quit()

效果同上

3.1.1.3 class_name
 '''class_name'''
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_class_name('s_ipt').send_keys('UI自动化')
 t.sleep(3)
 driver.quit()

效果同上

3.1.2超链接元素定位属性

超链接使用的前提是他的地址必须完整。

3.1.2.1 LINK_TEXT(精确查找)
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_link_text('视频').click()
 t.sleep(3)
 driver.quit()

 

 

3.1.2.2 PARTIAL_LINK_TEXT(模糊查询)
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_partial_link_text('频').click()         #模糊查询
 t.sleep(3)
 driver.quit()

效果同上

3.1.3追加定位元素属性

当一个元素使用ID,name,class_name定位不到的时候, 那么这个时候使用css(基于样式)和xpath(基于路径)

3.1.3.1 XPath
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_xpath('//*[@id="kw"]').send_keys('UI自动化')
 t.sleep(3)
 driver.quit()

 

 

3.1.3.2 full_XPath

在数据复制时选择full XPath,在ID为动态参数的情况下使用,具体代码同XPath一样。

XPath与full XPath(动态ID情况下使用)

 

 

3.1.3.3 css

 

 

 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 driver.find_element_by_css_selector('#kw').send_keys('UI自动化')
 t.sleep(3)
 driver.quit()

效果同上

3.1.4 tag_name元素定位方法

 '''tag_name'''
 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com')
 inputs=driver.find_elements_by_tag_name('input')
 inputs[7].send_keys('UI自动化')
 t.sleep(3)
 driver.quit()

效果同上

3.2多元素定位

多个元素定位,指的是元素的属性都一致,返回的是列表,可以根据列表的索引来定位元素属性。不管是单个元素定位还是多个元素定位,目前都有8种。

 driver=webdriver.Chrome()
 driver.get('file:///F:/TestDev/code/testdev/Python%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index(2).html')
 listID=driver.find_elements_by_id('login')
 # print(type(listID))
 # for item in listID:
 # print(item)
 #输入账户
 listID[0].send_keys('qwe')
 t.sleep(3)
 #输入密码
 listID[1].send_keys('123')
 t.sleep(3)
 #点击登录
 listID[2].click()
 t.sleep(2)
 driver.quit()

 

 

3.3多窗口解决

多窗口的处理的逻辑: 1、先获取当前窗口的句柄 2、点击后打开新的窗口 3、获取所有的窗口句柄 4、针对所有的窗口句柄循环,循环内部判断,如果不是当前的窗口,那么就是新的 窗口,那么就需要切换到新的窗口

 from selenium import webdriver
 from selenium.webdriver.common.by import By
 import time as t
 
 
 driver=webdriver.Chrome()
 driver.get('https://mail.sina.com.cn/')
 nowhandler=driver.current_window_handle
 t.sleep(3)
 driver.find_element(By.LINK_TEXT,'注册').click()
 t.sleep(3)
 allhandlers=driver.window_handles
 for handler in allhandlers:
    if handler !=nowhandler:
      driver.switch_to.window(handler)
      driver.find_element(By.NAME,'email').send_keys('sdadq')
      t.sleep(3)
      driver.close()
      t.sleep(2)
 driver.switch_to.window(nowhandler)
 driver.find_element(By.ID,'freename').send_keys('xcqwdq')
 t.sleep(3)
 driver.quit()

3.4 iframe框架定位

进入iframe框架三种方式: 1.ID 2.name 3.索引

3.4.1通过ID和name

 driver=webdriver.Chrome()
 driver.get('https://mail.qq.com/')
 # driver.switch_to.frame('login_frame')
 driver.switch_to.frame(1)
 driver.find_element(By.NAME,'u').send_keys('1069724225')
 t.sleep(3)
 driver.quit()

 

 

3.4.2通过索引

 driver=webdriver.Chrome()
 driver.get('https://www.taobao.com/')
 driver.find_element(By.LINK_TEXT,'亲,请登录').click()
 t.sleep(3)
 driver.find_element(By.NAME,'fm-login-id').send_keys('admin')
 t.sleep(3)
 driver.quit()

 

 

 

 

 

4、Webdriver类的常用方法

4.1获取当前测试地址

 '''获取测试地址'''
 driver=webdriver.Chrome()
 driver.get('http://www.baidu.com')
 print(driver.current_url)

 

 

4.2获取源代码

 driver=webdriver.Chrome()
 driver.get('http://www.baidu.com')
 print(driver.page_source)

 

 

4.3获取标题

 driver=webdriver.Chrome()
 driver.get('http://www.baidu.com')
 print(driver.title)

 

   

5、页面前进和后退

 '''前进和后退'''
 driver=webdriver.Chrome()
 driver.get('http://www.baidu.com')       #首先打开baidu
 t.sleep(3)
 driver.get('http://www.bing.com')       #3秒后跳转到bing
 t.sleep(3)
 driver.back()                         #再三秒后返回到baidu
 print(driver.current_url)             #输出地址
 driver.forward()                   #再次前进到bing
 print(driver.current_url)           #输出地址
 t.sleep(3)
 driver.quit()
 
posted @ 2022-06-27 19:46  饭依然特稀  阅读(132)  评论(0编辑  收藏  举报