学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

news2024/9/22 19:31:30

背景

  1. 学习使用 XPath 表达式来实现找到目标元素时智能封装等待
  2. 执行测试代码启动Chrome浏览器后,地址栏只显示data;
    在这里插入图片描述

代码如下

import unittest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.wait import WebDriverWait
from HTMLTestRunner_cn import HTMLTestRunner

class MyTest(unittest.TestCase):

    def setUp(self) -> None:
        chrome_option = webdriver.ChromeOptions()
        chrome_option.add_argument('--disable-gpu')
        self.driver = webdriver.Chrome(options=chrome_option)
        self.imgs = []  # 初始化存放测试截图的列表
        self.url = 'http://localhost:8080'

    def tearDown(self) -> None:
        try:
            self.driver.quit()
        except NoSuchElementException as e:
            print('tearDown Error details: {}'.format(e.args[0]))

    def find_element(self, locator):
        try:
            element = WebDriverWait(self.driver, 30).until(lambda x: x.find_element(*locator))
            return element
        except NoSuchElementException as e:
            print('Error details: {}'.format(e.args[0]))
            raise

    def test1(self):
        self.find_element(('id', 'username')).send_keys('admin')
        self.find_element(('id', 'password')).send_keys('admin')
        self.find_element(('xpath', '//input[@value="Login"]')).click()
        # 执行截图操作,将当前截图加入到测试报告中
        self.imgs.append(self.driver.get_screenshot_as_base64())
        self.find_element(('xpath', '//div[@id="accordion"]//div[contains(@class, "panel-title") and text()="信息查询"]')).click()
        self.imgs.append(self.driver.get_screenshot_as_base64())
        self.find_element(('partial link text', '查询顾客信息')).click()
        self.imgs.append(self.driver.get_screenshot_as_base64())

if __name__ == '__main__':
    test1 = unittest.defaultTestLoader.loadTestsFromTestCase(MyTest)
    suite = unittest.TestSuite(test1)

    # unittest.TextTestRunner().run(suite)

    runner = HTMLTestRunner(
        title='带截图的测试报告',
        description='xxx软件测试报告v0.1',
        stream=open('reports/sample_test_report.html', 'wb'),
        verbosity=2
    )

    runner.run(suite)

解决过程

  1. 看了好久找到了替代启动浏览器的方法:换成self.driver.get('http://localhost:8080')就好了
  2. 然后开始琢磨两者的区别:
    • 使用 self.driver.get('http://localhost:8080') 时,driver 是一个 WebDriver 对象,通过调用 get() 方法并传入网址参数来打开浏览器,并加载对应的网页。
    • 而当使用 self.url = 'http://localhost:8080' 时,你只是将网址赋值给了 self.url 这个实例变量,但并没有使用它来打开浏览器。所以在后续的代码中,浏览器仍然会使用默认的网址或者之前通过 driver.get() 方法设置的网址。
    • 如果希望使用 self.url 来打开浏览器,可以在测试方法 test1() 中,通过 self.driver.get(self.url) 来打开指定的网页。
def test1(self):
    self.driver.get(self.url)
    self.find_element(('id', 'username')).send_keys('admin')
    self.find_element(('id', 'password')).send_keys('admin')
    self.find_element(('xpath', '//input[@value="Login"]')).click()
    # 执行截图操作,将当前截图加入到测试报告中
    self.imgs.append(self.driver.get_screenshot_as_base64())
    self.find_element(('xpath', '//div[@id="accordion"]//div[contains(@class, "panel-title") and text()="信息查询"]')).click()
    self.imgs.append(self.driver.get_screenshot_as_base64())
    self.find_element(('partial link text', '查询顾客信息')).click()
    self.imgs.append(self.driver.get_screenshot_as_base64())

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java SE入门及基础(11)

程序调试 1. 什么是程序调试 当程序出现问题时,我们希望程序能够暂停下来,然后通过我们操作使代码逐行执行,观察整个过程中变量的变化是否按照我们设计程序的思维变化,从而找问题并解决问题,这个过程称之为程序调试…

ftp安装与配置 云服务器 CentOS7

1、FTP的安装 #安装 yum install -y vsftpd#设置开机启动 systemctl enable vsftpd.service#启动 systemctl start vsftpd.service#停止 systemctl stop vsftpd.service#查看状态 systemctl status vsftpd.service 2、配置FTP #修改前先进行备份文件 cp /etc/vsftpd/vsftpd…

LeetCode264. 丑数 II(相关话题:多重指针动态规划)

题目描述 给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 示例 1: 输入:n 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2&am…

物联网协议Coap之Core和NetWork简介

目录 前言 一、Coap的Core包 1、Coap对象 2、Message对象 3、Request对象 4、Response对象 二、Coap的NetWork调试 1、UDP运行模式 2、Network消息接收 3、Sender线程发送数据 三、总结 前言 在之前的博文中,对Californium中Coap的实现进行了简要的介绍&a…

31 树的存储结构二

DIsplay() 递归显示 :图示 求树的高度时&#xff0c;递归的技巧 在递归的过程中&#xff1a;ret单独和任意一个子树的子高度比较&#xff0c;如果ret<max&#xff0c;retmax ------------- 注意&#xff1a;组织链表和子链表的【元素类型】都是TLNode* 链表都要先通过TLNod…

Matlab数学建模算法之模拟退火算法(SA)详解

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

分布式事务:构建无障碍的云原生应用的完美解决方案

目录 一、前言 二、分布式事务概述 2.1 什么是分布式事务 2.2 分布式事务的挑战 2.3 分布式事务的分类 三、传统解决方案分析 3.1 两阶段提交协议&#xff08;2PC&#xff09; 3.2 三阶段提交协议&#xff08;3PC&#xff09; 3.3 补偿事务 3.4 其他传统解决方案 四…

什么是梅尼埃病?

梅尼埃病&#xff08;Meniere’s Disease&#xff0c;MD&#xff09;作为耳鼻咽喉科常见的眩晕疾病&#xff0c;是一种原因不明的、以膜迷路积水为主要病理特征的内耳疾病&#xff0c;临床表现为反复的发作性眩晕、波动性听力下降、耳鸣和耳闷胀感&#xff0c;发病率约为5~20/1…

paypal贝宝怎么绑卡支付

一、PayPal是什么 PayPal是一个很多国家地区通用的支付渠道&#xff0c;我们可以把它理解为一项在线服务&#xff0c;相当于美国版的支付宝。你可以通过PayPal进行汇款和收款&#xff0c;相比传统的电汇和西联那类的汇款方式&#xff0c;PayPal更加简单和容易&#xff0c;被很…

WebRTC入门:基础的核心协议与概念(二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

如何将.NET 8.0的ASP.NET Core Web API部署成Windows服务

写在前面 前面写了一篇关于将.NET应用转换成Windows服务的方法&#xff0c;其实真正的目的是为了探索如何将Asp.Net Core Web Api 部署成Windows 服务。基于上一篇的基础&#xff0c;只需把创建 WebApplication 的代码放到 BackgroundService 的ExecuteAsync方法中即可。 其中…

redis夯实之路-集群详解

Redis有单机模式和集群模式。 集群是 Redis 提供的分布式数据库方案&#xff0c;集群通过分片( sharding )来实现数据共享&#xff0c;并提供复制和故障转移。集群模式可以有多个 master 。使用集群模式可以进一步提升 Redis 性能&#xff0c;分布式部署实现高可用性&#xff…

快速了解——逻辑回归及模型评估方法

一、逻辑回归 应用场景&#xff1a;解决二分类问题 1、sigmoid函数 1. 公式&#xff1a; 2. 作用&#xff1a;把 (-∞&#xff0c;∞) 映射到 (0&#xff0c; 1) 3. 数学性质&#xff1a;单调递增函数&#xff0c;拐点在x0&#xff0c;y0.5的位置 4. 导函数公式&#xff1a;f…

MySQL 和 Redis 如何保证数据一致性,通过MySQL的binlog实现

1、简介 MySQL 和 Redis 如何保证数据一致性&#xff0c;目前大多讨论的是先更新Redis后更新MySQL&#xff0c;还是先更新MySQL 后更新Redis&#xff0c;这两种方式在实际的应用场景中都不能确保数据的完全一致性&#xff0c;在某些情况下会出现问题&#xff0c;本文介绍使用 C…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode&#xff0c;安装python和python扩展包&#xff0c;如下图所示&#xff1a; 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

C++/WinRT 简介

C/WinRT 是 Windows 运行时 (WinRT) API 的完全标准新式 C17 语言投影&#xff0c;以基于标头文件的库的形式实现&#xff0c;旨在为你提供对新式 Windows API 的一流访问。 利用 C/WinRT&#xff0c;你可以采用任何符合标准的 C17 编译器创作和使用 Windows 运行时 API。 Wind…

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网&#xff1a;https://code.visualstudio.com/ 下载地址&#xff1a;https://code.visua…

谷歌最新医学领域LLM大模型:AMIE

2024年1月11日Google 研究院发布最新医疗大模型AMIE&#xff1a;用于诊断医学推理和对话的研究人工智能系统。 文章链接&#xff1a;Articulate Medical Intelligence Explorer (AMIE) giuthub&#xff1a;目前代码未开源 关于大模型之前有过一篇总结&#xff1a;大语言模型(L…

C++11 14 17内存管理

智能指针 unique_ptr 初始化 访问和移动赋值 重置和移动内存资源 自定义删除器 shared_ptr 原理 自定义删除器 分配器allocator和new重载 new表达式原理 operator new delete placement new new (buf) 是一种 "placement new" 的使用方式&#xff0c;它允许在已…

Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案

1. 前言 当进行数据库写入或更新时&#xff0c;有时会遇到存在字符串中包含单个双引号或者单引号。 2. 单引号和双引号""作用 在数据库中&#xff0c;字符串常量时需要用一对英文单引号或英文双引号""将字符串常量括起来。 比如&#xff1a; select * …