软件测试 Selenium基础知识

  • Selenium 介绍
  • 安装 Selenium
  • 安装 geckodriver 浏览器驱动
  • Selenium 的元素定位
  • 点击元素
  • 清空文本输入框、向文本输入框输入文本
  • 获取元素属性
  • 下拉页面
  • 页面弹窗的定位以及弹窗文本的获取
  • 窗口跳转
  • iframe 定位

什么是selenium

在官网上“Selenium automates browsers. That's it!”,即“Selenium 是自动化浏览器”。

selenium通常用于功能基本稳定,没有频繁变动的网页。

安装需要的库(命令)

pip3 install --upgrade pip pip3 install selenium

实验环境

847ff5bbd8204892a18a4e9e7ff031e4.png

 环境测试(尝试打开一个浏览器并实现相关操作)

  • 打开浏览器
  • 进入百度网站
  • 设置窗口大小为宽 800,高 400
  • 等待 3 秒
  • 刷新页面
  • 最大化窗口
  • 退出浏览器
  • 倒退页面
  • 前进页面

具体代码:

#! /usr/bin/python3

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep


# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(service=Service(r'D:\teststudy\chromedriver.exe'))

# 浏览器进入百度网站
wd.get("https://www.baidu.com")

# 设置浏览器宽800,高400
wd.set_window_size(800, 400)

# 等待3秒
sleep(3)

# 刷新页面
wd.refresh()

# 等待3秒
sleep(3)

# 最大化窗口
wd.maximize_window()

# 进入另一个网站
wd.get("https://blog.csdn.net/")
sleep(3)

# 后退到上一个页面--百度网站
wd.back()

sleep(3)

# 前进到下一个页面--CSDN网站
wd.forward()

sleep(3)

# 退出浏览器
wd.quit()

常见的定位元素及其对应方法

元素定位方法

id

find_element(By.ID)()
namefind_element(By.NAME)()
class namefind_element_by_class_name()
tag namefind_element_by_tag_name()
link textfind_element_by_link_text()
partial link textfind_element_by_partial_link_text()
xpathfind_element_by_xpath()
css selectorfind_element_by_css_selector()
常见的操作
操作名称使用方法示例

点击

click()find_element_by_xx().click()
清空文本框 clear()find_element_by_xx().clear()

输入文本框

 

.send_keys(“内容”)find_element_by_xx().send_keys("内容")
文本信息.text find_element_by_xx().text
元素尺寸.size find_element_by_xx().size
其他属性.get_attribute("属性名")find_element_by_xx()..get_attribute("想获取的属性名")

注:上述列表后三项为获取元素属性的操作

注:查看元素的各个属性可通过 Chrome 自带的开发者工具,快捷键为F12,通过元素查看器定位到想查看的元素,然后在开发者工具中查看具体的属性名,如classtypeid等。

 

js = 'document.documentElement.scrollTop=具体的下拉高度值;'

页面弹窗 alert 的定位:driver.switch_to.alert

alert = driver.switch_to.alert

# 查看alert中的文字

print(alert.text)

# 点击确定

alert.accept()

# 点击取消(如果有)

alert.dismiss()

切换窗口:.switch_to.window()

# 获取窗口所有句柄
all_handles = driver.window_handles
# 获取当前窗口句柄
curr_window = driver.current_window_handle
# 遍历所有句柄
for k in all_handles:
    # 如果不是当前窗口句柄
    if k != curr_window:
        # 窗口句柄切换
        driver.switch_to.window(k)

定位 iframe:

  • .switch_to.frame():切换到 iframe
  • .switch_to.default_content(): 切换出 iframe
    iframe = driver.find_element_by_xpath()
    
    # 切换到iframe
    
    driver.switch_to.frame(iframe)
    
    ...页面操作代码...
    
    # 跳出iframe
    
    driver.switch_to.default_content()

    常用的测试方法包括:等价类边界值正交排列因果图场景法

Xpath知识与实战

如何通过浏览器插件获取元素的xpath以及在特殊情况下自己写xpath

xpath使用路径表达式在XML文档中进行导航

(F12会弹出开发者工具)

表达式描述
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点
..选取当前节点的父节点
@选取属性
*匹配任何元素节点

分析一下这个 xpath://*[@id="header-navbar-collapses"]/ul[1]/li[3]/a

  • //即从当前选择的文档节点开始
  • *匹配任何元素节点
  • [@id="header-navbar-collapses"]通过id属性确认当前文档开始的节点位置,即从idheader-navbar-collapses的位置开始
  • /这个斜杠没有打头,所以这里意思是下一级
  • ul[1]这里方括号中的1表示第一个ul标签。注意:xpath 中的标签数从 1 开始
  • li[3]表示第三个li标签

“登录”的 xpath://*[@id="header-navbar-collapses"]/ul[2]/li[2]/a

  • //即从当前选择的文档节点开始
  • *匹配任何元素节点
  • [@id="header-navbar-collapses"]通过id属性确认当前文档开始的节点位置
  • /斜杠没有用作开头,所以这里是下一级的意思
  • ul[2]定位到上面id属性下一层的第二个ul标签
  • li[2]定位到ul下一层的第二个li标签
  • a定位到li标签下一层的a标签

有时候我们用复制来的 xpath 并不能定位到我们想要的元素,原因在于有一些网站的id元素属性也是变化的。这时候我们就只能自己来写 xpath 了。

2.4.1 例子一

ce7802fdf83f9026c76cfb0df0e8136a.png

我们来定位“实验楼”这个图片元素的 xpath,看到的 HTML 文档结构如下图:

fd1a65cb657e469e2d168ed5f7a402a7.png

分析:

 

 

分析:

  • 目标元素是img标签
  • img标签往上查找文档,看有没有唯一的属性值,如id。注意,class属性值一般不是唯一的,所以一般不用class属性作为定位元素
  • 发现文档中直到文档顶部也没有属性唯一的元素,所以这里我们就从文档顶部即根节点开始
  • /的意思即从根节点选取
  • 所以我们可以确定 xpath 开头是/
  • 第一层是html标签,所以 xpath 初步确定为/html
  • 第二层是body标签,xpath 确定为/html/body
  • 目标元素在body标签下第三个div中,所以 xpath 确定为/html/body/div[3]
  • 下一层只有一个div标签,这是可以省略后面的[1],即/html/body/div[3]/div
  • 再下一层在第二个div中,所以 xpath 确定为/html/body/div[3]/div/div[2]
  • 依次类推,继续向下一层定位,即可确定 xpath 为/html/body/div[3]/div/div[2]/div/nav/div[1]/a/img

2.4.2 例子二

a7111ec8ee1675eaf3a83908464a9bf7.png

我们来定位搜索框的 xpath,看到的 HTML 文档结构如下图:

a941496d44a0400ef13a45302e1c26f6.png

分析:

  • 目标元素是a标签
  • 从目标元素开始往上查找属性唯一的元素
  • 发现有id属性,且该属性值固定不变,所以可以直接利用id属性进行定位
  • //即从当前选择的文档节点开始,即//*[@id='header-navbar-collapses']
  • 下一层ul不唯一,所以 xpath 里要写索引,即//*[@id="header-navbar-collapses"]/ul[1]
  • 接下来的li标签也不是唯一的,所以 xpath 确定为//*[@id="header-navbar-collapses"]/ul[1]/li[1]
  • 最后定位到a标签,所以确定 xpath 为//*[@id="header-navbar-collapses"]/ul[1]/li[1]/a

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件测试面试题包括一些关于Selenium的限制和缺陷以及测试类型的问题。关于Selenium的限制和缺陷,除了基于Web和移动应用程序的测试Selenium不支持桌面软件自动化测试。此外,软件测试报告和用例管理只能依赖第三方插件,例如Junit/TestNG和unittest。由于Selenium是免费的软件,没有供应商提供支持和服务,如果有问题,只能求助于Selenium社区。另外,Selenium的学习门槛可能较高,需要具备一定的编程语言基础才能充分发挥其功能。 此外,面试中还可能涉及其他测试相关的知识点,如基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等等。 当谈到Selenium自动化测试时,主要涉及的测试类型是冒烟测试和回归测试。冒烟测试和回归测试是在Selenium自动化测试中常用的测试类型。回归测试主要是写一些功能稳定、容易实现的场景,并通过自动化手段去实现,从而节约测试时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [selenium 自动化测试面试题及答案](https://blog.csdn.net/qq_28163501/article/details/107030286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [selenium面试题总结——测试经验分享](https://blog.csdn.net/qq_42434318/article/details/108491882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值