VS Code + Python + Selenium 自动化测试基础-01

VS Code + Python + Selenium 自动化测试基础-01

    • 让我们来讲一个故事
    • 为什么要写自动化
    • 开发前的准备工作
    • 牛刀小试
    • 开常用的web DriverAPI-定位元素
      • id定位:find_element_by_id()
      • name 定位:find_element_by_name()
      • class 定位:find_element_by_class_name()
      • 标签定位:find_element_by_tag_name()
      • 链接文本定位:find_element_by_link_text()
      • 部分链接定位:find_element_by_partial_link_text()
      • XPath定位:find_element_by_xpath()
      • 绝对路径定位
    • 控制浏览器的行为
      • 浏览器视窗的大小
      • 模拟浏览器更新
    • 总结

五星上将麦克阿瑟曾经说过“不会写自动化测试,不是好开发“

让我们来讲一个故事

今天和女朋友吵架了,(假设你有女朋友)。

今晚又是一个人睡沙发,这天晚上,你躺在沙发上,夜不能寐

因为,你今天被质疑不会写写自动化,怒砸了秦始皇的耳机!
–专家说这是秦始皇当年指挥士兵灭六国带的耳麦
专家说这是秦始皇当年指挥士兵灭六国带的耳麦
决定学习一下这个事情——VS Code + Python + Selenium 自动化测试基础

为什么要写自动化

在这之前,思考一个问题,为什么要写自动化?

在开发一个大型的网站专案过程中,不需要针对特定的功能进行重复性的测试,其主要目的是为了确保系统兼容是否合乎规格,并确认其结果是否合乎预期。但在整个网站测试的过程中其中,存在很多测试细节或者高度重复性质的测试行为,如果仅仰赖人工测试,往往会测到昏暗地,并且有可能会隐藏人的疏失,导致难以追踪的问题。

因此自动化测试在整个专案进行开发的过程中会扮演重要的一环。在我们进一步去编写自动化脚本的动作之前,需要先建立起基本的开发环境,之后接下来就着手进行编写脚本的动作。

开发前的准备工作

1.安装 VS Code
2.安装 VS Code Python 扩展
在这里插入图片描述
3.安装Python3(版本3.8.2)下载
安装完成后,可以通过以下指令确认是否安装完成


# python --版本
Python 3.8.2
  1. 安装 Selenium 的 Python 套件

# pip install selenium 
# pip show selenium

5.下载Chrome的ChromeDriver
下载后,解压缩将chromedriver.exe的执行档跟系统的Python执行档放在相同的数据夹下就可以全域(Global)使用chromedriver
在这里插入图片描述
基本上 Selenuim 能够控制浏览器行为、或者浏览器进行沟通,都需要透过 Webdriver 或者 Selenuim RC (Remote Control) 来控制,因此 WebDriver 扮演着重要的角色。

牛刀小试

1.目标:利用Python + Selenium 开启Google首页


from selenium import webdriver

# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()

browser.get("https://www.google.com")
  1. 目标:利用前一个示例,在 Google 输入框中输入“phone”,然后单击搜索
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()

#  Google 首页
browser.get("https://www.google.com")

# 寻找网页中的搜索框
inputElement = browser.find_element_by_name("q")

# 在搜索框中輸入文字
inputElement.send_keys("iphone")

# 提交
inputElement.submit()

# Google 搜索結果的 XPath
resultLocator = "//a/h3/div"

try:
    # 等待网页搜索结果
    WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, resultLocator)))

    # 取得第一页的搜索结果
    page1_results = browser.find_elements_by_xpath(resultLocator)

    # 輸出搜索结果
    for item in page1_results:
        print(item.text)

except TimeoutException:
    print('等待逾時!')

开常用的web DriverAPI-定位元素

WebDriver提供了几种元素的定位方式,在Python中对应的方式如下

id定位:find_element_by_id()

HTML规定,在HTML文件中id必须是唯一的,因此可以利用这个唯一性来寻找元素
browser.find_element_by_id(“keyword”)

name 定位:find_element_by_name()

HTML 规定,利用 name 来指定元素的名称,因此也可以利用这个属性来寻找元素
browser.find_element_by_name(“shopping_cart”)

class 定位:find_element_by_class_name()

HTML 规定,class 用于指定元素的类别名称,其用法与 id、name 类似。
browser.find_element_by_class_name(“s_super”)

标签定位:find_element_by_tag_name()

HTML透过不同的标签来定义元素,因此可以利用标签的名称来直接寻找,但是这个在实际运用上却很少使用,主要的原因是HTML文档中,存在大量的相同标签browser.find_element_by_tag_name
(“input”)

链接文本定位:find_element_by_link_text()

这个专门用于定位有文字的超链接,例如HTML文档为
<a href=”//shopping.pchome.com.tw”_cid=”shopping_hp”>线上购物
则使用链接文本定位,可以用以下的方式表示
browser.find_element_by_link_text(“24H线上购物”)

部分链接定位:find_element_by_partial_link_text()

这个正式链接文字定位的辅助方法,有时候有些文字的超链接过长,这个时候可以取文字的部分文字进行定位,但是由于是取部分文字,是否具备唯一性,那就需要引用HTML文档而定,使用方式为
browser.find_element_by_partial_link_text(“线上购物”)

XPath定位:find_element_by_xpath()

XPath有多种定位策略,最直觉的是绝对路径定位,其绝对路径指标签名称的系统关系来定位元素的绝对路径
browser.find_element_by_xpath(“/html/body/div/ div[2]/form/input”)

绝对路径定位

browser.find_element_by_xpath(“//input[@id=‘keyword’]”)
其中//input表示当前页面的某个输入标签,[@id=‘keyword’] 表示这个元素的id值为keyword,因此上述内容的id也可以换成name或者class来进行元素的定位

对于自动化测试来说,学会了要素的定位方式后,基本上已经有50%的功力可以来写脚本了。剩下的部分就是去了解WebDriver中所提供的各种方法以及真实应用。

控制浏览器的行为

WebDriver 提供了许多可以控制浏览器的方式,一般常用的有

浏览器视窗的大小

有时我们希望浏览器能够在指定的大小下执行,通常是为了确认RWD的效果是否正常显示。例如我们将浏览器设置为480 X 800,设置为操作版的网页,然后浏览页面。这个时候可以使用 set_window_size() 来完成这个目的

from selenium import webdriver

# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()

browser.get('https://24h.m.pchome.com.tw/')

# 设定尺寸
browser.set_window_size(480, 800)

浏览器上一页、下一页

一般用户在使用浏览器的时候,会使用上一页跟下一页,可以在曾经浏览过的页面之间跳转,因此WebDriver控制也提供了对应的方法() 和forward() 来模拟上一页和下一页的用户行为。

模拟浏览器更新

有时用户会按F5来刷新页面,可以通过refresh()来实现。


from selenium import webdriver
from time import sleep

# 使用 Chrome 的 WebDriver
browser = webdriver.Chrome()
browser.maximize_window()

first_url = 'https://www.msn.com/zh-tw'
print ("目前浏览 %s" %(first_url))
browser.get(first_url)
sleep(3)

second_url = 'https://www.google.com.tw/'
print ("目前浏览 %s" %(second_url))
browser.get(second_url)
sleep(3)


browser.back()
browser.refresh()
sleep(3)


browser.forward()
browser.refresh()
sleep(3)

总结

仅就Python跟Selenium基础的应用来说明并且分享心得,下一篇会再继续介绍更进阶的WebDriver应用,并且会分享如何在日常工作中中将自动化测试导入,自动化测试也是我们测试的基本功之一。
以上就是今天的全部内容,希望对大家有所帮助,也希望大家多多留言、点赞、在看、转发四连爱❤️ 支持。 咱们下篇文章见,Bye~👋
在这里插入图片描述

一个正经的测试,专注于AI与软件测试技术和宝藏干货分享,每天准时更新原创技术文章,每月不定期赠送技术书籍,让我们在测试会所在测试社区这个大家庭一起学习交流。喜欢记得星标⭐我,每天及时获得最新推送,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

logstack 日志技术栈-04-opensource 开源工具 OpenObserve+Grafana Loki

日志技术栈 日志管理包含日志数据存储、处理、分析和可视化&#xff0c;通过利用日志管理工具&#xff0c;可以监控性能趋势、解决问题、检测异常并优化整体系统性能。 近年来&#xff0c;开源日志管理解决方案在大家寻求灵活且经济有效的方式来管理现代系统典型的大量日志数…

04 思维导图的方式回顾ospf

思维导图的方式回顾OSPF 1 ospf 领行学习思维导图 1.1 ospf 的工作过程 建立领据表同步数据库计算路由表1.2 ospf 的状态 1.3 ospf的报文 1.4 ospf的L

Unity中URP下的SimpleLit的 Lambert漫反射计算

文章目录 前言一、Lambert漫反射计算11、MixRealtimeAndBakedGI 函数有三个重载2、3号 调用了 2号3、1号调用了 SubtractDirectMainLightFromLightmap函数4、我们重点来看 Lambert漫反射的实现部分5、其余部分 二、Lambert漫反射计算21、LightingLambert 前言 在之前的文章中&…

hot100:06三数之和

题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 算法思想&#xff1a; 使用双指针的思想&#xff0c;首先需要先对数组进行排序&#xff0c;让数组满足单调性&#xff0c;这样在相加的时候更加方便更新条件&#xff1b;再遍历…

【代码整理】基于COCO格式的pytorch Dataset类实现

import模块 import numpy as np import torch from functools import partial from PIL import Image from torch.utils.data.dataset import Dataset from torch.utils.data import DataLoader import random import albumentations as A from pycocotools.coco import COCO …

【机器学习300问】14、什么是特征工程?

当我学习到这个知识点的时候十分困惑&#xff0c;因为从名字中我完全无法理解这个什么东西。于是呢我就去问了一下维基百科&#xff0c;下面是他的回答&#xff1a; 特征工程&#xff08;英语&#xff1a;feature engineering&#xff09;又称特征提取&#xff08;英语&#xf…

Jetbrains Writerside 使用教程

系列文章目录 前言 一、入门 Writerside 是基于 IntelliJ 平台的 JetBrains 集成开发环境。使用它可以编写、构建、测试和发布技术文档。 如果你想将 Writerside 作为另一个 JetBrains IDE 的插件&#xff0c;请参阅 Writerside 作为插件。 1.1 安装 Writerside&#xfeff;…

cetos7搭建部署k8s 版本1.28

主机分配 内存最少是4G cpu个数最少两个 IP内存CPU主机名192.168.231.12044K1 192.168.231.12144K2192.168.231.12244K3 关闭防火墙 systemctl stop firewalled 关闭swap vim /etc/fstab 设置主机名称 hostnameset 安装docker 三个主机 初始化集群 在mas…

相关系数(皮尔逊相关系数和斯皮尔曼相关系数)

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;5.1 对数据进行描述性统计以及皮尔逊相关系数的计算方法_哔哩哔哩_bilibili 注&#xff1a;直接先看 &#xff08; 三、两个相关系数系数的比较 &#xff09; 部分&#x…

VC++中使用OpenCV进行颜色检测

VC中使用OpenCV进行颜色检测 在VC中使用OpenCV进行颜色检测非常简单&#xff0c;首选读取一张彩色图像&#xff0c;并调用函数cvtColor(img, imgHSV, COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV&#xff0c;再设置好HSV三个分量的上限和下限值&#xff0c;调用inRange函…

自动化测试:5分钟了解Selenium以及如何提升自动化测试的效果

在快节奏的技术世界里&#xff0c;自动化测试已经成为确保 Web 应用程序质量和性能的重要手段。自动化测试不仅加快了测试过程&#xff0c;还提高了测试的重复性和准确性。Selenium&#xff0c;作为领先的自动化测试工具之一&#xff0c;为测试人员提供了强大的功能来模拟用户在…

C++-类和对象(3)

1. 再谈构造函数 1.1 构造函数体赋值 我们在创建一个对象时&#xff0c;编译器会调用该对象的构造函数对该对象的成员进行初始化。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day…

Linux系统安装Samba服务器

在实际开发中&#xff0c;我们经常会有跨系统之间文件传递的需求&#xff0c;Samba 便是能够在 Windows 和 Linux 之间传递文件的服务&#xff0c;功能也是非常强大和好用&#xff0c;本篇文章将介绍如何在 Linux 系统上安装 Samba 服务&#xff0c;以 CentOS7 系统为例。 一、…

SpringBoot:详解Bean生命周期和作用域

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、生命周期二…

大数据平台的硬件规划、网络调优、架构设计、节点规划

1.大数据平台硬件选型 要对Hadoop大数据平台进行硬件选型,首先需要了解Hadoop的运行架构以及每个角色的功能。在一个典型的Hadoop架构中,通常有5个角色,分别是NameNode、Standby NameNode、ResourceManager、NodeManager、DataNode以及外围机。 其中 NameNode 负责协调集群…

手把手教你购买阿里云服务器以及Ubuntu环境下宝塔搭建网站

阿里云服务器Ubuntu通过宝塔搭建网站详细教程 前言一、阿里云服务器的购买二、进入控制面板2.1 修改密码2.2 开放端口号 三、 测试服务器是否可以连接四、 安装nginx搭建网站(选做)五、安装宝塔5.1 登录宝塔官网5.2 卸载预装的mysql和nginx5.3 安装宝塔5.4 访问宝塔控制台5.5 修…

CSS:backdrop-filter实现毛玻璃的效果

实现效果 实现代码 /* 关键属性 */ background-color: rgba(255, 255, 255, 0.4); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);完整代码 <style>/* 遮罩层 */.mo-mask {position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height…

Hadoop3完全分布式搭建

一、第一台的操作搭建 修改主机名 使用hostnamectl set-hostname 修改当前主机名 关闭防火墙和SELlinux 1&#xff0c;使用 systemctl stop firewalld systemctl disable firewalld 关闭防火墙 2&#xff0c;使用 vim /etc/selinux/config 修改为 SELINUXdisabled 使用N…

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…

爬虫进阶之selenium模拟浏览器

爬虫进阶之selenium模拟浏览器 简介环境配置1、建议先安装conda2、创建虚拟环境并安装对应的包3、下载对应的谷歌驱动以及与驱动对应的浏览器 代码setting.py配置scrapy脚本参考中间件middlewares.py 附录&#xff1a;selenium教程 简介 Selenium是一个用于自动化浏览器操作的…