selenium操作win窗口

最近测试的项目中涉及到上传文件的功能,自动化脚本中需要使用python win32模块来操控,记录下使用心得吧!

1.首先引入python win32gui模块

import win32gui

2.安装spyxx.exe,用于定位win窗口

准备工作做好了,开工吧

3.点击类似“上传”等按钮后会弹出win窗口,那就先定位它吧,如下

定位代码如下:

uploadwindowname = u‘打开‘ #CHROME窗口名称是打开
uploadwindow = win32gui.FindWindow(‘#32770‘, uploadwindowname)#定位“文件上传 窗口
print uploadwindow

最后输出,如果输出0说明定位失败了

parent=win32gui.FindWindowEx(uploadwindow,None,‘ComboBoxEx32‘,None)
Combobox_real=win32gui.FindWindowEx(parent,None,‘ComboBox‘,None)
Edit_box=win32gui.FindWindowEx(Combobox_real,None,‘Edit‘,None)

这段代码是先定位到最上层的父窗口,再逐层定位到输入框(chrome于FF有所不同,FF下可以直接定位)

win32gui.SetForegroundWindow(Edit_box)
time.sleep(1)
win32gui.SendMessage(Edit_box,win32con.WM_SETTEXT,None,r‘C:\Users\gmsd12\Desktop\BLAT_blacklist.xls‘)
openbuttonname = u‘打开(&O)‘
time.sleep(1)
openbutton = win32gui.FindWindowEx(uploadwindow, None,"Button",openbuttonname)#定位“保存”按钮
print openbutton
win32gui.PostMessage(openbutton, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
win32gui.PostMessage(openbutton, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)

这段代码是把输入框置顶,否则无法输入,输入文件路径后,定位到打开按钮,保存按钮,最后回车键按下再松开。

至此完成了上传文件时操作win窗口,其中FF下和Chrome下窗口名称有所不同(当时还被折磨了好久才发现(⊙﹏⊙)),IE的暂时没有试过。

时间: 2024-10-11 02:11:04

selenium操作win窗口的相关文章

Win窗口坐标二维坐标与OpenGl的世界坐标系的转换

Win窗口坐标二维坐标与OpenGl的世界坐标系的转换 1. 首先明白Win环境的窗口二维坐标系表示 即,Win的屏幕坐标的坐标系表示如下:左上为坐标系原点,正右为X轴正方向, 正下方为Y轴正方向.    2. 在了解一下Opengl的视口坐标系 Opengl设置视口操作如下: glViewport(0,0,m_wide,m_heigth); 3. 关于opengl的世界坐标系,用户坐标系,模型坐标系可以查看博客 http://www.cnblogs.com/icmzn/p/5003600.ht

初识句柄操作(控制台窗口小实验)

今日学习了控制台使用句柄操作的方法. 我们都知道,使用iostream也可以向屏幕中输出语句. 但它们只能实现基本的输入输出 操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream和它们是C++两套不同的输入. 因此,我们需要句柄类来帮助我们完成这个操作. 下面直接上练习小代码,为贪食蛇清屏的小片段. 经一番查找,习得基本用法. 1 void clrscr(void) { 2 //控制台窗口信息类型 存有缓冲区大小 当前光标位置 窗口显示

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)(或将数据传回A窗口) 以下是从实际项目中截取出来和window.open()方法相关的代码,业务逻辑如下: 1. 点击父窗口的div标签(id="addMatchSchedule"),出发点击事件,打开子窗口: 2. 点击子窗口的button按钮,触发点击时间,即调用addSchduleI

js子窗口操作父窗口的标签

======================================父窗体 <input id="aaaa" type="button"/> function upfile()         {                         resultValue = window.showModelessDialog("ceshi.aspx?file=DownFile", window, "dialogWidt

JS打开新窗口,子窗口操作父窗口

<!--父窗口弹窗代码开始--> <script type="text/javascript"> function OpenWindow() { window.open('WebForm1.aspx', '_blank', 'width=400,height=100,menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes'); } functi

wpf C# 操作DirectUI窗口 SendMessage+MSAA

原文:wpf C# 操作DirectUI窗口 SendMessage+MSAA 最近做一个抓取qq用户资料的工具,需要获取qq窗口上的消息,以前这种任务是用句柄获取窗口中的信息,现在qq的窗口用的是DirectUI,只有窗口句柄,没有控件句柄,句柄这条路走不通了.不过较新版的qq的部分控件实现了微软的IAccessible接口(称为Microsoft Active Accessibility技术,简称MSAA),可以用另一套函数获取qq窗口的信息.不过要对窗口进行输入还是要靠句柄,上面说过,Di

selenium操作下拉滚动条的几种方法

数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法 我这里演示的是Java版本的,使用chromedriver,当然你可以换成python或其他语言,浏览器用firefox或者phantomjs(无头浏览器),大部分都是适用的,不同浏览器有略微的差异. 初始化一个浏览器 首先要允许浏览器运行js脚本 DesiredCapabilities sCaps = new Desi

远程操作win的命令窗口

使用winrm远程操作window的命令窗口,前提关闭远程机子的防火墙 # -*- coding:UTF-8 -*- import winrm ip = 'xxx.xxx.xxx.xxx' #远程机器ip userName = 'xxx' #用户名 password = 'xxx' #密码 wintest = winrm.Session(ip, auth=(userName, password)) ret = wintest.run_cmd('执行命令') print( bytes.decode

TeamCity编译执行selenium上传窗口脚本缺陷

TeamCity编译selenium脚本,对于上传窗口处理只支持sendKeys的使用,不支持模拟人为按下Enter键和使用autoIt等操作,即使本地调试通过的脚本,提交编译执行后,也是报错,原因是teamCity编译执行脚本的过程中,只是后台启动相应浏览器的driver,没有真实打开一个浏览器导致的.发现这个缺陷还得从编写上传课件测试用例脚本说起. 一个上传课程测试用例,功能测试是,填写课程的基本信息后,上传课程的图片,如图1,图片上传成功后,系统会提示“图片上传成功”,然后点击[选择]按钮