网页自动化测试开发中记录pytest

1切换cmd文件目录C:\Users\14600>D:
D:\>cd D:\worksoftware
D:\worksoftware>
2单个py文件打包成.exe文件1.pyinstaller -F -c (项目主文件)test_01shouye.py
该路径下存在文件名,主项目文件 test_01shouye.py
2.执行spec文件:
pyinstaller -F -c docx2xml.spec
该exe文件已将所有的py文件封装完了,可随处使用
3生成依赖文件requirements.txtpip install pipreqs
pipreqs ./ --encoding=utf8  --force
4清空输入框并且输入内容element.clear()
element.send_keys(text)
5定位显示鼠标悬浮元素from selenium.webdriver.common.action_chains import ActionChains
move = driver.find_element_by_css_selector(
                'div.queryschema-control.ivu-col.ivu-col-span-16 > div > div > div > input')
ActionChains(driver).move_to_element(move).perform()
time.sleep(2)
6上传文件选择的窗让 python 实现在窗口中选择文件的功能
 文件上传窗口处理
通过 pywinauto 选择上传文件
# 点击上传图片按钮
    shoppingmainlibraryico = smpUI.wd.find_element(By.XPATH,
          '//*[@id="__nuxt"]/div/form/div[6]/div/div[2]/div/div/span/button').click()

    # 使用pywinauto来选择文件
    app = pywinauto.Desktop()
    # 选择文件上传的窗口
    dlg = app["打开"]
    # 选择文件地址输入框,点击激活
    dlg["Toolbar3"].click()
    # 键盘输入上传文件的路径
    send_keys("D:\worksoftware\pytest\pytest-auto-zdwy\Files\image")
    # 键盘输入回车,打开该路径
    send_keys("{VK_RETURN}")
    # 选中文件名输入框,输入文件名
    dlg["文件名(&N):Edit"].type_keys("smallp.png")
    # 点击打开
    dlg["打开(&O)"].click()
    time.sleep(3)
    # 随便选一个输入框回车
    smpUI.wd.find_element(By.XPATH, '//*[@id="brief"]/div/div/span/input').send_keys(Keys.ENTER)
7进入iframe界面iframeInstantDeathshopping = smpUI.wd.find_element('xpath', '//*[@id="layui-layer-iframe1"]')
    smpUI.wd.switch_to.frame(iframeInstantDeathshopping)
8退出iframe界面# 定位到iframe
    iframe1 = smpUI.wd.find_element(By.TAG_NAME,'iframe')
    # 句柄切换进iframe
    smpUI.wd.switch_to.frame(iframe1)

# 从 iframe2 切换到上一级 iframe1
    # smpUI.wd.switch_to.parent_frame()


    # smpUI.wd.switch_to.default_content()
9读取Excel文件中的测试数据批量执行def test_excelInstantDeath():
    # 读取Excel文件
    df = pd.read_excel('D:\\worksoftware\\pytest\\pytest-auto-zdwy\\InstantDeathtestcasedate.xlsx')
# 初始化WebDriver
    smpUI.login('zhouzhenzhen', '111111')
    time.sleep(2)
    # 打开网页
    # 点击左侧系统导航栏
    systemInstantDeath = smpUI.wd.find_element(By.XPATH,
                                                  '//*[@id="LAY-system-side-menu"]/li[5]/dl/dd[1]/a')
    smpUI.wd.execute_script("arguments[0].click();", systemInstantDeath)
    time.sleep(2)

    # 进入iframe
    iframeInstantDeath = smpUI.wd.find_element('xpath', '//*[@id="LAY_app_body"]/div[2]/iframe')
    smpUI.wd.switch_to.frame(iframeInstantDeath)

    # 循环处理每行数据
    for index, row in df.iterrows():

        # 输入活动名称
        InstantDeathsift = smpUI.wd.find_element(By.CSS_SELECTOR, 'body > div > form > div > div:nth-child(1) > div > input')
        InstantDeathsift.clear()
        InstantDeathsift.send_keys(row['活动名称'])
        time.sleep(2)

        time.sleep(2)
        if row['状态'] == '进行中':
            # 点击状态选择框
            InstantDeathsiftstate = smpUI.wd.find_element(By.XPATH,
                                                          '/html/body/div/form/div/div[2]/div/div/div/i').click()
            # 选择进行中
            InstantDeathsiftstatejxz = smpUI.wd.find_element(By.CSS_SELECTOR, 'body > div > form > div > div:nth-child(2) > div > div > dl > dd:nth-child(4)').click()
        else:
            # 点击状态选择框
            InstantDeathsiftstate = smpUI.wd.find_element(By.XPATH,
                                                          '/html/body/div/form/div/div[2]/div/div/div/i').click()
            # 选择已结束
            InstantDeathsiftstateyjs = smpUI.wd.find_element(By.CSS_SELECTOR, 'body > div > form > div > div:nth-child(2) > div > div > dl > dd:nth-child(5)').click()
        # 输入活动时间
        InstantDeathsifttimes = smpUI.wd.find_element(By.CSS_SELECTOR, '#date')
        InstantDeathsifttimes.clear()
        InstantDeathsifttimes.send_keys(row['活动时间'])
        time.sleep(2)
        # 点击筛选按钮
        InstantDeathsiftanniu = smpUI.wd.find_element(By.CSS_SELECTOR, 'body > div > form > div > div:nth-child(4) > button:nth-child(1)').click()
        InstantDeathsiftanniu = smpUI.wd.find_element(By.CSS_SELECTOR,
                                                      'body > div > form > div > div:nth-child(4) > button:nth-child(1)').send_keys(Keys.ENTER)
        # 在每次登录完成后,等待页面加载,可以添加一些额外的操作
        smpUI.wd.implicitly_wait(5)  # 等待5秒钟,确保页面加载完成
10远程调试Chrome 浏览器远程调试:启动一个 Chrome 浏览器实例,并在端口上启用了远程调试。远程调试允许外部工具(如 Selenium WebDriver)以编程方式与浏览器实例进行交互。
此命令将 Chrome 配置为通过端口上的 WebDriver(例如 Selenium)进行远程控制,使用特定的用户数据目录进行会话隔离和管理。
C:\Program Files\Google\Chrome\Application>chrome.exe --remote-debugging-port=9222 --user-data-dir=“D:\selenium_chrome” 
11Selenium如何接管已经运行的Chrome浏览器# 接管已经运行的Chrome浏览器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 以下代码是使用 Python 接管已经打开的浏览器
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Chrome(options=options)
browser.get('https://www.bilibili.com/')
print(browser.title) # 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
12打开窗口并实现窗口切换#!/usr/bin/env python
# -*- coding: utf-8 -*-
# python + selenium + chrome 如何打开新窗口,并实现窗口切换
# Selenium一直使用同一个浏览器,不重复开浏览器
# 控制已打开的浏览器,切换窗口,在该浏览器打开新的窗口
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
from selenium.webdriver.chrome.options import Options
import pyautogui
# 以下代码是使用 Python 接管已经打开的浏览器
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Chrome(options=options)
# browser.get('https://www.bilibili.com/')
browser.get("https://www.taobao.com/")
print(browser.title) # 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
# browser = webdriver.Chrome()
# browser.set_window_size(900, 900)   # 根据桌面分辨率来定
#
# # 打开淘宝页面
# browser.get("https://www.taobao.com/")
# 获取淘宝页面的 title和handle信息
taobaoWindowHandle = browser.current_window_handle
taobaoTitle = browser.title
print(f"1. taobaoTitle = {taobaoTitle}, taobaoWindowHandle = {taobaoWindowHandle}")
time.sleep(2)
# 打开路由器配置页面 http://172.16.0.1
js = 'window.open("https://cart.taobao.com/cart.htm?spm=a21bo.jianhua/a.1997525049.1.5af92a89mOqGdX&from=mini&ad_id=&am_id=&cm_id=&pm_id=1501036000a02c5c3739");'
# js = 'window.open("http://192.168.1.1");'
browser.execute_script(js)
time.sleep(2)
# 如果没有switch做窗口切换的话,即使有打开新的窗口,浏览器还是会focus在原来的窗口
print(f"2. routing Configure Page had been opened, currentTitle = {browser.title}, currentHandle = {browser.current_window_handle}")
# 拿到所有的窗口
allHandles = browser.window_handles
print(f"3. allHandles = {allHandles}")
# 第一种思路:按照handle,从淘宝窗口切换到路由器配置窗口
# routeWindowHandle = 0
# routeTitle = 'None'
# for handle in allHandles:
#     if handle != browser.current_window_handle:
#         #(无法直接通过输入url访问目标系统) driver.get('https://www.baidu.com') 你这不是进入百度了吗。 那此时的driver就是百度句柄。
#         # 当你再次 driver.get('https://xxx') 产生了2个窗口 那就需要driver.switch_to.window(handles[0])切回百度
#         browser.switch_to.window(handle)
#         routeWindowHandle = browser.current_window_handle
#         routeTitle = browser.title
#         break
# print(f"4. switch to routeWindow, routeWindowHandle = {routeWindowHandle}, routeTitle = {routeTitle}, currentHandle = {browser.current_window_handle}, currentTitle = {browser.title}")

# 第二种思路:当然还有一种方法是根据窗口的title进行切换
# 从路由器配置窗口,切换回淘宝窗口
for handle in allHandles:
    if browser.title.find("百度") == -1:
        browser.switch_to.window(handle)
print(f"5. switch to taobaoWindow, taobaoWindowHandle = {taobaoWindowHandle}, taobaoTitle = {taobaoTitle}, currentHandle = {browser.current_window_handle}, currentTitle = {browser.title}")
time.sleep(5)
# # 第三种思路:按照windowHandle切换,切换到taobao窗口
# browser.switch_to.window(taobaoWindowHandle)
# print(f"6. switch back to taobao window, currentHandle = {browser.current_window_handle}, taobaoWindowHandle = {taobaoWindowHandle}, routeWindowHandle = {routeWindowHandle}")
# time.sleep(10)
# browser.quit()
# browser.execute_script("window.open('https://www.baidu.com/', '_blank');")
# 实现在该浏览器打开新的标签页
# 模拟按 Ctrl + T 在活动窗口(您的浏览器)中打开新选项卡。
pyautogui.hotkey('ctrl', 't')
# Wait briefly for the new tab to open (adjust as needed)
time.sleep(1)
# Example: Navigate to a website in the new tab (you can use pyautogui to type the URL if needed)
pyautogui.typewrite('https://www.bilibili.com/')
pyautogui.press('enter')
13实现在打开的浏览器上打开新的标签页# 实现在该浏览器打开新的标签页
pyautogui.hotkey('ctrl', 't')
# 模拟按 Ctrl + T 在活动窗口(您的浏览器)中打开新选项卡。
time.sleep(1)
pyautogui.typewrite('https://www.bilibili.com/')
pyautogui.press('enter')
14不加载图片,加快访问速度
设置为开发者模式,防止被各大网站识别出来使用了Selenium
 options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) #不加载图片,加快访问速度
 options.add_experimental_option("excludeSwitches",['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
# # prefs = { "profile.managed_default_content_settings.images": 2 } # 设置无图模式
# # options.add_experimental_option("prefs", prefs) # 加载无图模式
15等待购买按钮出现后点击#等待购买按钮出现
                    wait = WebDriverWait(browser, 10)  # 超时时长为10s
                    linkbuy=wait.until(EC.presence_of_element_located((By.ID,'J_LinkBuy')))
                    linkbuy.click()
16刷新页面browser.refresh()  # 刷新页面
17打包成exe文件后报error: unrecognized arguments:--alluredir resultpip3 install six==1.14.0  #six 1.16.0不兼容

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

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

相关文章

C语言部分复习笔记

1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高,p先和 [] 结合说明p是一个数组,p先和*结合说明p是一个指针 括号保证p先和*结合,说明p是一个指针变量,然后指…

Web2Code :网页理解和代码生成能力的评估框架

多模态大型语言模型(MLLMs)在过去几年中取得了爆炸性的增长。利用大型语言模型(LLMs)中丰富的常识知识,MLLMs在处理和推理各种模态(如图像、视频和音频)方面表现出色,涵盖了识别、推…

系统中非功能性需求的思考

概要 设计系统时不仅要考虑功能性需求,还要考虑一些非功能性需求,比如: 扩展性可靠性和冗余安全和隐私服务依赖SLA要求 下面对这5项需要考虑的事项做个简单的说明 1. 可扩展性 数据量增长如何扩展? 流量增长如何扩展&#xf…

【LLM教程-llama】如何Fine Tuning大语言模型?

今天给大家带来了一篇超级详细的教程,手把手教你如何对大语言模型进行微调(Fine Tuning)!(代码和详细解释放在后文) 目录 大语言模型进行微调(Fine Tuning)需要哪些步骤? 大语言模型进行微调(Fine Tuning)训练过程及代码 大语言…

VuePress介绍

从本文开始,动手搭建自己的博客!希望读者能跟着一起动手,这样才能真正掌握。 ‍ VuePress 是什么 VuePress 是由 Vue 作者带领团队开发的,非常火,使用的人很多;Vue 框架官网也是用了 VuePress 搭建的。即…

000.二分查找算法题解目录

000.二分查找算法题解目录 69. x 的平方根(简单)

4PCS点云配准算法实现

4PCS点云配准算法的C实现如下&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/distances.h> #include <pcl/common/transforms.h> #in…

唯一ID:UUID 介绍与 google/uuid 库生成 UUID

UUID 即通用唯一识别码&#xff0c;是一种用于计算机系统中以确保全局唯一性的标识符。其标准定义于 RFC 4122 文档中。标准形式包含 32 个 16 进制数字&#xff0c;以连字符切割为五组&#xff0c;格式为 8-4-4-4-12&#xff0c;总共 36 个字符。&#xff08;形如, d169aa7f-4…

php 通过vendor文件 生成还原最新的composer.json

起因&#xff1a;因为历史原因&#xff0c;在本项目中composer.json基本算废了&#xff0c;没法直接使用composer管理扩展&#xff0c;今天尝试修复一下composer.json。 历史文件&#xff0c;可以看出来已经很久没有维护了&#xff0c;我们主要是恢复require的信息 {"na…

K8s节点维护流程

用途 用于下线异常节点、集群缩容等 操作步骤 1. 查看节点名称 先确认节点的名称 kubectl get node -o wide2. 设置节点不可调度 设置节点不可调度状态&#xff0c;禁止新的pod调度到该节点上 kubectl cordon ${node_name}3. 剔除节点上运行的pod&#xff08;生产环境慎…

Spring Boot中集成Redis实现缓存功能

Spring Boot中集成Redis实现缓存功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何在Spring Boot应用程序中集成Redis&#xff0c;实现…

AP无法上线原因分析及排障

一、AP未分配到IP地址 如果遇到AP无法上线问题&#xff0c;可以检查下AP是否分配到IP地址。AP获取IP地址有两种方式&#xff1a;静态方式&#xff1a;登录到AP设备&#xff0c;手工配置IP地址&#xff0c;该方式操作起来比较麻烦&#xff0c;不推荐使用&#xff1b;DHCP方式&am…

基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 文章目录 基于机器学习方法的股票预测系列文章目录一、CNN建模原理二、模型搭建三、模型参数的选择&#xff08;1&#xff09;探究window_size…

下代iPhone或回归可拆卸电池,苹果这操作把我看傻了

刚度过一个愉快的周末&#xff0c;苹果又双叒叕摊上事儿了。 iPhone13 系列被曝扎堆电池鼓包了。 早在去年&#xff0c;就有 iPhone13 和 iPhone14 用户反馈过类似的问题&#xff0c;表示在手机仅仅使用了一年多的时间就出现了电池鼓包的情况&#xff0c;而且还把屏幕给撑起来了…

舞会无领导:一种树形动态规划的视角

没有上司的舞会 Ural 大学有 &#x1d441; 名职员&#xff0c;编号为1∼&#x1d441;。 他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。 每个职员有一个快乐指数&#xff0c;用整数 &#x1d43b;&#x1d456; 给出&#xff0c;其中1≤&…

校园卡手机卡怎么注销?

校园手机卡的注销流程可以根据不同的运营商和具体情况有所不同&#xff0c;但一般来说&#xff0c;以下是注销校园手机卡的几种常见方式&#xff0c;我将以分点的方式详细解释&#xff1a; 一、线上注销&#xff08;通过手机APP或官方网站&#xff09; 下载并打开对应运营商的…

C++ 指针介绍

指针是C编程语言中的一个强大且重要的特性。它允许程序员直接操作内存地址&#xff0c;从而提供了对低级别内存的访问和控制。虽然指针在使用时可能比较复杂且容易出错&#xff0c;但它们在提高程序效率和灵活性方面有着不可替代的作用。本文将介绍C指针的基本概念、用法及其应…

Docker 中 MySQL 迁移策略(单节点)

目录 一、 简介二、操作流程2.1 进入mysql容器2.2 导出 MySQL 数据2.3. 将导出的文件复制到宿主机2.4 创建 Docker Compose 配置2.5 启动新的 Docker 容器2.6 导入数据到新的容器2.7 验证数据2.8 删除旧的容器&#xff08;删除操作需慎重&#xff09; 三、推荐配置四、写在后面…

当年很多跑到美加澳写代码的人现在又移回香港?什么原因?

当年很多跑到美加澳写代码的人现在又移回香港&#xff1f;什么原因&#xff1f; 近年来&#xff0c;确实有部分曾经移民到美国、加拿大、澳大利亚等地的香港居民选择移回香港。这一现象与多种因素相关&#xff0c;主要可以归结为以下几点&#xff1a; 疫情后的环境变化&#…

【STM32】温湿度采集与OLED显示

一、任务要求 1. 学习I2C总线通信协议&#xff0c;使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集&#xff0c;并将采集的温度-湿度值通过串口输出。 任务要求&#xff1a; 1&#xff09;解释什么是“软件I2C”和“硬件I2C”&#xff1f;&#xff08;阅读野火配…