前置准备
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。