自动化测试常用函数:元素定位、操作与窗口管理

目录

一、元素的定位

1. cssSelector

2. xpath

2.1 获取HTML页面所有的节点

2.2 获取HTML页面指定的节点

2.3 获取一个节点中的直接子节点

2.4 获取一个节点的父节点

2.5 实现节点属性的匹配

2.6 使用指定索引的方式获取对应的节点内容

二、操作测试对象

1. 点击/提交对象

2. 模拟按键输入

3. 清除文本内容

4. 获取文本信息

5. 获取当前页面标题

6. 获取当前页面URL

三、窗口

1. 切换窗口

2. 窗口设置大小

3. 屏幕截图

4. 关闭窗口


一、元素的定位

  • web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。
  • 常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector。
  • 常用的主要有 cssSelector xpath。

常见浏览器打开开发者工具的方法:

1. Google Chrome:

  • 右键点击网页,选择“检查”(Inspect)。
  • 按 `Ctrl + Shift + I`(Windows/Linux)或 `Command + Option + I`(Mac)。

2. Mozilla Firefox:

  • 右键点击网页,选择“检查元素”(Inspect Element)。
  • 按 `Ctrl + Shift + I`(Windows/Linux)或 `Command + Option + I`(Mac)。

3. Microsoft Edge:

  • 右键点击网页,选择“检查”(Inspect)。
  • 按 `Ctrl + Shift + I`(Windows)。

4. Safari:

  • 在菜单栏中选择“开发”,然后选择“显示 Web 检查器”(Show Web Inspector)。
  • 按 `Command + Option + I`。

5. Opera:

  • 右键点击网页,选择“检查”(Inspect)。
  • 按 `Ctrl + Shift + I`。

6. Internet Explorer:

  • 按 `F12`。

7. 使用快捷键:

  • 大多数现代浏览器都支持按 `F12` 打开开发者工具。

8. 菜单栏:

  • 在一些浏览器中,你可以通过点击浏览器窗口顶部的菜单栏中的“工具”(Tools)或“更多”(More),然后选择“开发者工具”(Developer Tools)来打开。

注意:不同的浏览器版本可能会有细微的差别,但上述方法应该适用于大多数情况。

1. cssSelector

选择器的功能:选中页面中指定的标签元素。

选择器的种类分为基础选择器复合选择器,常见的元素定位方式可以通过id选择器子类选择器来进行定位。


  • “搜索输入框元素”: #kw


  • “百度一下按钮”: #su


定位百度首页的“百度热搜”元素,可以使用通过id选择器和子类选择器进行定位:#hotsearch-content-wrapper > li

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")

ret = driver.find_elements(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li")
for i in ret:
    print(i.text)#获取每个元素对应的文本信息

driver.quit()

2. xpath

XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。

xpath使用路径表达式来选择xml文档中的节点。


xpath语法中:

2.1 获取HTML页面所有的节点

  • //*

2.2 获取HTML页面指定的节点

//[指定节点]

  • //ul :获取HTML页面所有的ul节点
  • //input:获取HTML页面所有的input节点


2.3 获取一个节点中的直接子节点

  • /
  • //span/input

2.4 获取一个节点的父节点

  • ..
  • //input/.. 获取input节点的父节点

2.5 实现节点属性的匹配

  • [@...]
  • //*[@id='kw'] 匹配HTML页面中id属性为kw的节点

2.6 使用指定索引的方式获取对应的节点内容

注意:xpath的索引是从1开始的。

  • 例如:百度首页通过://div/ul/li[3] 定位到第三个百度热搜标签

  • 更便捷的生成selector/xpath的方式:右键选择复制"Copy selector/xpath"

二、操作测试对象

        获取到了页面的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输入、清除、获取文本。

1. 点击/提交对象

  • click()

例:找到百度第一条热搜并点击

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")
time.sleep(1)

#点击事件(查找元素 + 点击按钮)
#第一种写法
driver.find_element(By.CSS_SELECTOR,"#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title").click()
time.sleep(2)

#第二种写法(先查找后点击)
# ele = driver.find_element(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")
# ele.click()

#关闭浏览器
driver.quit()

2. 模拟按键输入

  • send_keys(" ")

例:在百度输入框输入一行文字

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")
time.sleep(1)

#查找元素 + 输入内容
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("天行健,君子以自强不息")
time.sleep(2)

#关闭浏览器
driver.quit()

3. 清除文本内容

  • 输入文本后又想换一个新的关键词,这里就需要用到 clear()
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")
time.sleep(1)

#查找元素 + 输入内容
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("天行健,君子以自强不息")
time.sleep(2)

driver.find_element(By.CSS_SELECTOR, "#kw").clear()
time.sleep(2)

driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("地势坤,君子以厚德载物")
time.sleep(2)

#关闭浏览器
driver.quit()

4. 获取文本信息

  • 获取文本信息: text
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")
time.sleep(1)

#获取文本信息
text = driver.find_element(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title").text
print(text)
assert text == "“嫦娥”既是中国的 又属于全人类"

#关闭浏览器
driver.quit()


  •  获取属性值: get_attribute("属性名称") 
#获取属性值
text = driver.find_element(By.CSS_SELECTOR, "#su").get_attribute("value")
print(text)

5. 获取当前页面标题

  • title

#获取当前页面标题
title = driver.title
print(title)

6. 获取当前页面URL

  • current_url

#获取当前页面URL
url = driver.current_url
print(url)

三、窗口

1. 切换窗口

1)获取当前页面句柄:

driver.current_window_handle

2)获取所有页面句柄:

driver.window_handles

3)切换当前句柄为最新页面:

for handle in allHandle:
    if handle != curHandle:
        driver.switch_to.window(handle)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")
time.sleep(1)

#点击百度首页的图片功能,跳转到图片页面

#跳转之前百度首页的标题和URL
print("before:"+driver.title)
print("before:"+driver.current_url)

driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(8)").click()

#1.获取当前页面句柄
curHandle = driver.current_window_handle
#2.获取所有页面句柄
allHandle = driver.window_handles
#3.切换当前页面为最新页面
for handle in allHandle:
    if handle != curHandle:
        driver.switch_to.window(handle)

#跳转之后百度图片的标题和URL
print("after:"+driver.title)
print("after:"+driver.current_url)

#关闭浏览器
driver.quit()

2. 窗口设置大小

  • 窗口最大化
driver.maximize_window()
  • 窗口最小化
driver.minimize_window()
  • 窗口全屏
driver.fullscreen_window()
  • 手动设置窗口大小
driver.set_window_size(300, 300)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

driver.get("https://www.baidu.com")

#窗口大小的设置
#窗口最大化
time.sleep(2)
driver.maximize_window()
#窗口最小化
time.sleep(2)
driver.minimize_window()
#窗口全屏
time.sleep(2)
driver.fullscreen_window()
#手动设置窗口大小
time.sleep(2)
driver.set_window_size(300, 300)

#关闭浏览器
driver.quit()

3. 屏幕截图

        我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,但是我们可以通过抓拍来记录当时的错误场景。

🌴简单版本

driver.save_screenshot("./images/image.png")
  • 如果不指定图片保存路径,屏幕截图后会自动保存在当前项目同级目录下;
  • 如果想保存在指定文件夹下面,就要新建文件夹,步骤如图所示: 


 🌴高阶版本

        由于图片给定的名称是固定的,当我们多次运行自动化脚本时,历史的图片将会被覆盖;所以为了将历史的图片文件保存下来,就需要每次生成的图片文件名称都不一样,这时就得咋们的高阶版本上场了。

from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

#打开百度标签页
driver.get("https://www.baidu.com")

#屏幕截图
#1.简单版本
driver.save_screenshot("./images/test.png")

#2.高阶版本
filename = "autotest-"+datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
driver.save_screenshot("./images/"+filename)

#关闭浏览器
driver.quit()

4. 关闭窗口

driver.quit():表示退出浏览器,所有的标签页都会被关闭。

driver.close():表示退出一个窗口。
注意:窗口关闭后driver要重新定义。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

#打开百度标签页
driver.get("https://www.baidu.com")

#打开新的标签页
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(6)").click()

#关闭标签页
time.sleep(2)
driver.close()

#关闭浏览器
time.sleep(2)
driver.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南风与鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值