[自动化测试:实践02-01]:Selenium整合Autoit:自动调用百度识图

前置准备

https://blog.csdn.net/Abraxs/article/details/142905693 [自动化测试:WebDriver]:AutoIt安装
https://blog.csdn.net/Abraxs/article/details/142931813 [自动化测试:Selenium]:环境部署和Webdriver的使用

一:实践目的

调用百度识图完成自动识图的功能。

二:实验环境构建

基础环境构建:参考第一讲讲义和自动化测试开发实验环境配置指南.MP4视频

三:实践步骤

打开Pycharm,新建python文件training2-1.py编程实现如下功能。
打开百度主页https://www.baidu.com/。
点击识图按钮

点击“选择文件”

在弹出的对话框中,调用autoit函数填充路径并按下打开按钮。

等待,得到识图结果。
调用JS滚动屏幕。浏览识图信息。
图像来源:实践2\配套资源,内含5张图像。
要求循环完成所有图像的识图
自动读取文件夹内所有图像,调用上述程序操作步骤自动完成所有图像的识图。

四:自动化前置准备

1:安装autoit

在这里插入图片描述

在这里插入图片描述

2:Selenuim操作获取页面元素位置

在这里插入图片描述

上传文件按钮XPATH 位置://*[@id=“form”]/div/div[2]/div[2]/input

在这里插入图片描述

3:WebDrivier:对应代码

 # 打开百度首页
    driver.get("http://www.baidu.com")
    sleep(2)
    # 单机相机图标
    driver.find_element(By.CSS_SELECTOR, ".soutu-btn").click()
    # 单机选择文件图标:等待并选择文件上传元素(这里需要确保 XPath 是正确的)
    ele_up = WebDriverWait(driver, 2).until(
        lambda x: x.find_element(By.XPATH, '//*[@id="form"]/div/div[2]/div[2]/input')
    )

Autoit桌面工具获取上传文件元素

4:Autoit:对应代码(注意:不同浏览器如谷歌 火狐 对应的title可能不一样)

控件的标识符通常基于它们的类名、实例号(在窗口中的唯一编号)或文本(如果控件有可见的文本标签)

 	# 这里要用鼠标的单机才可以
    action = ActionChains(driver=driver)
    action.click(on_element=ele_up)
    action.perform()
    sleep(2)
    # 使用autoit 操作窗口,等待30秒,知道只当窗口被激活
    autoit.win_wait_active(title="打开", timeout=30)  # 传入窗口标题和等待时间
    # 选择组件,输入路径文本
    autoit.control_set_text("打开", "Edit1", imagefile)
    sleep(2)
    # 选择组件,单机文件上传
    autoit.control_click(title="打开", control="Button1")
    sleep(5)
    print("上传成功")

鼠标拖转到文件名 框内 和 答案 按钮(类名、实例号(Edit + 1))

在这里插入图片描述
在这里插入图片描述

5:执行滚动操作

滚动查看识别内容

初始化滚动位置:

var = 400:这里定义了一个变量var,并将其初始化为400。这个值代表了页面滚动的起始位置(距离页面顶部的像素数)。
循环滚动:
for i in range(10)::这个循环将执行10次,意味着页面将滚动10次,每次滚动后都会有一个短暂的暂停(通过sleep(1)实现)。

执行滚动脚本:

driver.execute_script('document.documentElement.scrollTop = ’ + str(var)):这行代码使用Selenium的execute_script方法执行了一段JavaScript代码。这段JavaScript代码设置了页面的滚动位置。document.documentElement.scrollTop是一个属性,用于获取或设置文档在垂直方向上已滚动的像素值。通过将这个值设置为var,您可以将页面滚动到指定的位置。

更新滚动位置:

var += 200:在每次循环迭代结束时,var的值都会增加200。这意味着每次滚动后,页面都会向下移动额外的200像素。
暂停:
sleep(1):在每次滚动之后,代码会暂停1秒。这个暂停是为了让用户(或自动化脚本的其他部分)有时间看到滚动效果,并可能用于等待页面内容加载(尽管在这个上下文中,简单的sleep可能不是最佳的等待策略,因为它不考虑网络延迟或页面渲染时间)。

对应代码

    var = 400
    for i in range(10):
        driver.execute_script('document.documentElement.scrollTop = ' + str(var))
        var += 200
        sleep(1)

五:全代码(基于谷歌驱动)

import autoit  # 识别窗体组件的库,不是pyautoit
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
import glob


# 定义上传一张图片的函数
def auto_upload(imagefile):
    # 打开百度首页
    driver.get("http://www.baidu.com")
    sleep(2)
    # 单机相机图标
    driver.find_element(By.CSS_SELECTOR, ".soutu-btn").click()
    # 单机选择文件图标:等待并选择文件上传元素(这里需要确保 XPath 是正确的)
    ele_up = WebDriverWait(driver, 2).until(
        lambda x: x.find_element(By.XPATH, '//*[@id="form"]/div/div[2]/div[2]/input')
    )
    # 这里要用鼠标的单机才可以
    action = ActionChains(driver=driver)
    action.click(on_element=ele_up)
    action.perform()
    sleep(2)
    # 使用autoit 操作窗口,等待30秒,知道只当窗口被激活
    autoit.win_wait_active(title="打开", timeout=30)  # 传入窗口标题和等待时间
    # 选择组件,输入路径文本
    autoit.control_set_text("打开", "Edit1", imagefile)
    sleep(2)
    # 选择组件,单机文件上传
    autoit.control_click(title="打开", control="Button1")
    sleep(5)
    print("上传成功")

    # 滚动查看识别内容
    var = 400
    for i in range(10):
        driver.execute_script('document.documentElement.scrollTop = ' + str(var))
        var += 200
        sleep(1)


# 主程序
if __name__ == '__main__':
    # 载入文件夹中所有的让图片
    folder_path = "E:\上海开放大学\第四学期\python自动化测试\课程实践二:WebDriverAPI\实践2(学生).rar\实践2(学生)\配套资源"
    files = []

    # 获取图片路径
    for file_abs in glob.glob(folder_path + "/*.jpg"):
        files.append(file_abs)

    # 初始化浏览器对象
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)

    # 测试只循环一次;
    # auto_upload(files[0])
    # # 循环识别图片
    for file in files:
        print(repr(file))
        auto_upload(file)

    # 退出浏览器
    driver.quit()


六:实现效果

自动上传

在这里插入图片描述

执行滚动

在这里插入图片描述

作业结果提交方式

建立文件夹:实践2,内含如下文件打包发送。(注:实践2只需要在2个实验中任选一个提交即可)
training2-1.py。

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

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

相关文章

服务器数据恢复—RAID5阵列中部分成员盘重组RAID5阵列后如何恢复原raid5阵列数据?

服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障&#xff…

你还在用一串数字访问你的系统吗?

大家还记得第一次启动SpringBoot应用并在浏览器访问是如何进行的吗?在SpringBoot启动后,我们会看到如图所示: SpringBoot内置tomcat以端口8080启动,然后根据指引,我们在浏览器输入: http://127.0.0.1:8080…

穿越数据迷宫

第一章 在未来的世界里,人类的生活已经被高度数字化。互联网不再是简单的信息交换平台,而是成为了一个庞大的虚拟世界——“数据迷宫”。在这个世界里,每个人都有一个独特的数字身份,他们的生活、工作、娱乐都离不开这个虚拟空间…

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…

网络优化系列:探讨网络请求的性能提升策略

文章目录 引言一、网络请求优化1.1 DNS 解析耗时因素优化措施相关文章 1.2 创建连接耗时因素优化措施相关文章 1.3 发送 / 接收数据耗时因素优化措施相关文章 1.4 关闭连接耗时因素优化措施相关文章 二、网络库2.1 网络库的角色2.2 网络库的比较2.3 实际应用中的选择相关文章 三…

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…

微服务架构深入理解 | 技术栈

微服务架构深入理解 | 技术栈 服务网关 服务网关是在微服务架构中扮演重要角色的组件&#xff0c;它是系统对外的入口&#xff0c;负责接收和处理客户端的请求&#xff0c;并将请求路由到相应的微服务。服务网关常常与API管理、负载均衡、安全认证、流量控制等功能结合&#xf…

OpenSLL下载,环境变量配置

https://slproweb.com/products/Win32OpenSSL.html 环境变量 新建一个path为安装选择的目录的bin路径

AI图像相似性搜索对比:VIT, CLIP, DINO-v2, BLIP-2

图像相似性搜索的核心在于一个简单的想法&#xff1a;图像可以表示为高维空间中的向量。当两个图像相似时&#xff0c;它们的向量应该在这个空间中占据相似的位置。我们可以通过测量角度&#xff08;或余弦相似度&#xff09;来确定这些向量的相似程度。如果角度小&#xff0c;…

零基础Java第十二期:类和对象(三)

目录 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 1.2. static成员变量初始化 二、代码块 2.1. 静态代码块和实例代码块 ​三、对象的打印 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 public class Linear {public st…

三层交换技术,eNSP实验讲解

三层交换技术&#xff0c;eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、应用场景5、与路由器的区别 二、eNSP仿真实验1、步骤一&#xff1a;创建连接&#xff0c;明确参数。2、步骤二&#xff1a;设置PC1和PC2参数3、步骤三&#xff1a;配置交换机&#xff0c;通过命…

【Linux】掌握库的艺术:我的动静态库封装之旅

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.什么是库1.2 认识动静态库1.2.1 动态库1.2.2…

访问控制技术原理与应用

目录 访问控制概述实现访问控制目标访问控制参考模型常见访问控制模型访问控制模型-DAC自主访问控制访问控制模型-MAC强制访问控制访问控制模型-RBAC基于角色的访问控制访问控制模型-ABAC基于属性的访问控制 访问控制概述 访问控制是对资源对象的访问授权控制的方法以及运行机…

nginx配置转发到elk的kibana的服务器

服务器准备 在135服务器上安装nginx服务 编辑kibana服务器的配置文件 将端口改为监听自己 杀掉之前kibana进程 重新启动kibana服务 因为设置了监听自身&#xff0c;所以前台访问kibana页面报错 此时我们修改nginx配置文件&#xff0c;用grep命令反选不含#和空行的行 将其覆盖原…

【Android】View的事件分发机制

文章目录 分发顺序ActivityViewGroupView 协作方法整体流程注意 Activity事件分发ViewGroup事件分发View点击事件总结 分发顺序 Activity->ViewGroup->View Activity 分发事件&#xff1a;Activity 通过 dispatchTouchEvent 方法分发事件&#xff0c;首先尝试将事件传递…

湘潭市学生公交卡线上申领流程及一寸照片自拍方法

在湘潭市&#xff0c;学生公交卡的线上申领流程已经非常便捷&#xff0c;同时&#xff0c;为了满足学生公交卡申领时所需的一寸照片要求&#xff0c;本文将详细介绍整个申领流程以及如何使用手机自拍并制作线上申领学生公交卡所需的一寸照片电子版。 一、湘潭市学生公交卡线上申…

翻译工具体验分享:deepl翻译等10款神器对比

作为一位在外贸行业摸爬滚打多年的客服&#xff0c;我深知在与国际客户沟通时&#xff0c;准确、高效的翻译工具是多么的重要。今天&#xff0c;我就来和大家分享一下我使用过的几款翻译工具&#xff0c;一共是十款&#xff0c;大家可以先看看。 一、福昕在线翻译 传送门&…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

六 在WEB中应用MyBatis(使用MVC架构模式)

六、在WEB中应用MyBatis&#xff08;使用MVC架构模式&#xff09; 实现功能&#xff1a; 银行账户转账 使用技术&#xff1a; HTML Servlet MyBatis WEB应用的名称&#xff1a; bank 6.1 需求描述 6.2 数据库表的设计和准备数据 6.3 实现步骤 第一步&#xff1a;环境…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录&#xff1a; ├─node_modules //第三方依赖 ├─public //静态资源&#xff08;不参与打包&#xff09; └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…