web笔记2

'''什么时候可以做UI自动化测试'''
#业务流程不频繁改动
#UI元素不频繁改动
#需要频繁回归的场景
#核心场景等

'''Selenium的简介'''
#官方网站:https://www.selenium.dev/
#简介
#用于web浏览器测试的工具
#支持的浏览器包括IE,Firefox,Safari,Chrome,Edge等
#使用简单,可使用Java,Python等多种语言编写用例脚本
#主要由三个工具构成:WebDriver、IDE、Grid


'''Selenium环境配置步骤'''
#准备好Python/Java环境
#准备好selenium依赖
#driver的下载与配置(Mac与Windows不同)
#在代码中import对应的依赖


'''Selenium的安装(Python)'''
#前提:
#配置好python环境
#配置好pip工具
#安装: pip install selenium


'''Driver的下载与配置步骤'''
#下载浏览器对应的driver,谷歌浏览器和火狐浏览器选一个即可
#官方链接:https://www.selenium.dev/documentation/en/webdriver/driver_requirements/
#配置 driver 的环境变量
#重启命令行工具,验证是否配置成功


'''chromedriver的下载-Windows'''
#chromedriver的下载
#确定与浏览器匹配的driver版本
#根据使用的操作系统下载相应的 chromedriver
#淘宝镜像:https://npm.taobao.org/mirrors/chromedriver/


'''chromedriver 环境变量配置-Windows'''
#Windows详细配置步骤:https://ceshiren.com/t/topic/58


'''验证配置chromedriver是否成功-Windows'''
#重启命令行,输入:chromedriver --version
#出现chromedriver版本信息则配置成功
# 导入selenium 包
from selenium import webdriver

# 创建一个 Geckodriver 的实例。Firefox()会从环境变量中寻找浏览器驱动
driver = webdriver.Chrome()
# 打开网址
driver.get("https://ceshiren.com/")
# 关闭driver
driver.quit()
'''标准的功能用例结构'''
#用例标题(搜狗搜索功能)
#前提条件(进入搜狗首页)
#用例步骤(1. 输入搜索关键词 2.按下回车键)
#预期结果(1. 搜索成功 2. 搜索结果列表包含关键字)
#实际结果


'''自动化用例结构'''
#用例标题:测试包、文件、类、方法名称 作用:用例的唯一标识
#前提条件:setup、setup_class(Pytest);
#        BeforeEach、BeforeAll(JUnit) 作用:测试用例前的准备动作,比如读取数据或者driver的初始化
#用例步骤:测试方法内的代码逻辑  作用:测试用例具体的步骤行为
#预期结果:assert 实际结果 == 预期结果  作用:断言,印证用例是否执行成功
#实际结果:assert 实际结果 == 预期结果  作用:断言,印证用例是否执行成功
#后置动作:teardown、teardown_class(Pytest);
#         @AfterEach、@AfterAll(JUnit) 作用:脏数据清理、关闭driver进程
'''浏览器控制'''
#selenium提供了对应的api的支持
#get 打开浏览器 web自动化测试第一步
#refresh 浏览器刷新 模拟浏览器刷新
#back 浏览器退回 模拟退回步骤
#maximize_window 最大化浏览器 模拟浏览器最大化
#minimize_window 最小化浏览器 模拟浏览器最小化

import time
from selenium import webdriver
def open_browser():
    driver=webdriver.Chrome()
    #打开浏览器 用get方法需要传递浏览器url
    driver.get('https://ceshiren.com/')
    # 等待时间
    time.sleep(2)
    # 刷新浏览器
    driver.refresh()
    #等待时间
    time.sleep(2)
    #最大化浏览器
    driver.maximize_window()
    time.sleep(2)
    #最小化浏览器
    driver.minimize_window()
    time.sleep(2)
    #返回上一步
    driver.back()



if __name__=='__main__':
    #打开浏览器
    open_browser()
'''Selenium八大定位方式'''
'''常见控件定位方法'''
'''HTML铺垫'''
'''
1 <html>
2 <head>
3 <meta charset="utf-8">
4 <title>测试人论坛</title>
5 </head>
6 <body>
7 <a href="https://ceshiren.com/" class="link">链接</a>
8 </body>
9 </html>
'''
#<>里的第一个为标签,属性:href="https://ceshiren.com/" 类属性:class="link"


'''Selenium定位方式'''
#Selenium提供了八种定位方式:
# 官方网站:https://www.selenium.dev/documentation/webdriver/elements/locators/
#方式	                描述
#class name	            class 属性对应的值
#css selector(重点)     css 表达式
#id(重点)	            id 属性对应的值
#name(重点)	        name 属性对应的值
#link text	            查找其可见文本与搜索值匹配的锚元素
#partial link text	    查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素。
#tag name	            标签名称
#xpath(重点)	        xpath表达式

'''selenium 常用定位方式'''
'''
格式:
driver.find_element_by_定位方式(定位元素)
driver.find_element(By.定位方式, 定位元素)
示例:
两种方式作用一模一样 ,官方建议使用第二种方式
driver.find_element_by_id("su")
driver.find_element(By.ID, "su") 
'''


'''
通过 id 定位
格式: driver.find_element(By.ID, "ID属性对应的值")
'''

'''
通过 name 定位
格式: driver.find_element(By.ID, "NAME属性对应的值")
'''

'''
css selector 定位
格式: driver.find_element(By.CSS_SELECTOR, "css表达式")
复制绝对定位(右键Copy-selector)
编写 css selector 表达式(后面章节详细讲解)
'''

'''
xpath 定位
格式: driver.find_element(By.XPATH, "xpath表达式")
复制绝对定位(右键Copy-xpath)
编写 xpath 表达式(后面章节详细讲解)
'''

'''
link 定位
格式:driver.find_element(By.LINK_TEXT,"文本信息")
'''

from selenium import webdriver
from selenium.webdriver.common.by import By

def web_locate():
    #首先需要实例化driver对象,Chrome一定要加()
    driver=webdriver.Chrome()
    #打开一个网页
    driver.get('http://vip.ceshiren.com/#/ui_study')
    #1.ID定位,第一个参数传递定位方式(ID),第二个参数传递定位元素(属性值),调用这个方法的返回值为WebElement
    #web_element = driver.find_element(By.ID,'locate_id')
    #print(web_element)
    #2.NAME定位
    #如果没有报错,证明元素找到了
    #如果报错no such element,代表元素定位可能出现错误
    #driver.find_element(By.NAME,'locate')
    #driver.find_element(By.NAME, 'locate111') 错误示例
    #3.CSS选择器定位
    #driver.find_element(By.CSS_SELECTOR,'#locate_id > a > span')
    #4.xpath 定位
    #driver.find_element(By.XPATH,'//*[@id="locate_id"]/a/span')
    #5.link 定位,通过链接文本方式(1)元素一定是a标签 (2)输入的元素为标签内的文本
    #driver.find_element(By.LINK_TEXT,'元素定位').click()



if __name__ == '__main__':
    web_locate()
'''常见控件(操作)交互方法'''
import time

'''点击,输入,清空'''
#点击:.click()
#输入:.send_keys('霍格沃兹测试开发')
#清空:.clear()

from selenium import webdriver
from selenium.webdriver.common.by import By

def a_b():
    #1.实例化driver对象
    driver=webdriver.Chrome()
    #2.打开一个网页
    driver.get('https://www.sogou.com/')
    #3定位到输入框进行输入操作
    driver.find_element(By.ID,'query').send_keys('霍格沃兹测试开发')
    #强行等待3秒钟
    time.sleep(3)
    #4对输入框进行清空
    driver.find_element(By.ID,'query').clear()
    time.sleep(3)
    #5再次输入
    driver.find_element(By.ID,'query').send_keys('霍格沃兹测试开发')
    time.sleep(3)
    #6点击搜索
    driver.find_element(By.ID,'stb').click()
    time.sleep(3)

if __name__ == '__main__':
    a_b()
'''获取元素属性信息'''
#原因:定位到元素后,获取元素的文本信息,属性信息等
#目的:根据这些信息进行断言或者调试
#演练地址: https://vip.ceshiren.com/#/ui_study
#获取元素文本
#driver.find_element(By.ID, "id").text
#获取元素的属性(元素对应的属性值)(html的属性值)
#driver.find_element(By.ID, "id").get_attribute("name")

from selenium import webdriver
from selenium.webdriver.common.by import By

def a_c():
    # 1,实例化driver
    driver=webdriver.Chrome()
    #2,打开网页
    driver.get('https://vip.ceshiren.com/#/ui_study/frame')
    #3,定位一个元素
    web_element=driver.find_element(By.ID,'locate_id')
    #4,打印这个元素
    #断点打在想看的对象下一行
    #debug运行看属性
    print(web_element)
    #5,获取元素的文本信息
    #不是每个元素都含有文本信息的,只有 有文本的才有
    print(web_element.text)
    #6,获取元素的属性对应的值
    a=web_element.get_attribute('name')
    b=web_element.get_attribute('id')
    print(a)
    print(b)


if __name__ == '__main__':
    a_c()