Python+Selenium处理Windows弹窗(非IE弹窗问题)-自动化测试
更新时间:2023-01-31 09:27:30 作者:多测师 浏览:112
1.背景:
对于上传保存的操作,selenium对于windows的控件窗口这种元素基本是没有办法,使用spy++工具以及引入python(pywin32)库可以弥补这个缺陷。
2.工具准备:(python+selenium自动测试环境)
(1)SPY++:查看窗口句柄工具
(2)pywin32库 (pywin32**win32gui、win32con、win32api)
3、使用方法:
(1)使用SPY++获取需要操作的窗口
(2)根据spy++获取对应的位置
分别使用print hex(pwin/pwin1/pwin2/pwin3/pwin4/pwin5)查看是否定位正确,若结果不是为0x00L,则正确
例如:
a = u'#32770'
pwin =win32gui.FindWindow(a,None)
pwin1=win32gui.FindWindowEx(pwin,None,'DUIViewWndClassName',None)
pwin2=win32gui.FindWindowEx(pwin1,None,'DirectUIHWND',None)
pwin3=win32gui.FindWindowEx(pwin2,None,'FloatNotifySink',None)
pwin4=win32gui.FindWindowEx(pwin3,None,'ComboBox',None)
pwin5=win32gui.FindWindowEx(pwin4,None,'Edit',None)
(3)获取窗口焦点
win32gui.SetForegroundWindow(pwin5)
(4)模仿键盘和鼠标进行操作:
win32api.keybd_event(13,0,0,0) # Enter
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0) #释放Enter按钮
四、实例:
#! /usr/bin/python
#coding=utf-8
import win32gui
import win32con
import win32api
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Firefox()
driver.maximize_window()
driver.get("https://www.baidu.com/")
time.sleep(3)
#定位到要右击的元素
page=driver.find_element_by_xpath(".//*[@id='u1']/a[1]")
#对定位到的元素执行鼠标右键操作
ActionChains(driver).context_click(page).perform()
page.send_keys("K")
time.sleep(3) #休眠3秒'''
#获取位置
a = u'#32770'
b = u'请输入要保存的文件名…'
#win32gui.FindWindow(a,None) 第一个参数为类名,第二个参数为标题
pwin =win32gui.FindWindow(a,b)
#pwin1=win32gui.FindWindowEx(pwin,None,'DUIViewWndClassName',None)
#层级,第三个参数为类名,第四个参数为标题
pwin1=win32gui.FindWindowEx(pwin,None,'DUIViewWndClassName',None)
pwin2=win32gui.FindWindowEx(pwin1,None,'DirectUIHWND',None)
pwin3=win32gui.FindWindowEx(pwin2,None,'FloatNotifySink',None)
pwin4=win32gui.FindWindowEx(pwin3,None,'ComboBox',None)
pwin5=win32gui.FindWindowEx(pwin4,None,'Edit',None)
'''
#------文件名保存为Test-----
#方法1: 通过keybd_event事件模拟键盘输入
win32gui.SetForegroundWindow(pwin5)
win32api.keybd_event(20,0,0,0)
win32api.keybd_event(20,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(84,0,0,0)
win32api.keybd_event(84,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(20,0,0,0)
win32api.keybd_event(20,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(69,0,0,0)
win32api.keybd_event(69,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(83,0,0,0)
win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(84,0,0,0)
win32api.keybd_event(84,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(1,0,0,0)
win32api.keybd_event(1,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(1)
'''
#方法2:通过Windows的SendMessage函数消息发送快捷键
win32gui.SendMessage(pwin5, win32con.WM_SETTEXT, None, 'Test')
time.sleep(1)
#-----定位到取消按钮(确认键类似)------
b = u"取消"
cancel_button = win32gui.FindWindowEx(pwin, None,'Button',b)
#键盘聚焦点在“取消”按钮
'''
#--------按取消键--------
#方法1:
win32gui.SetForegroundWindow(cancel_button)
#按键盘Down键,操作“取消”按钮,激活
time.sleep(1)
win32api.keybd_event(40,0,0,0)
win32api.keybd_event(40,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(1)
#按键盘ENTER键
win32api.keybd_event(13,0,0,0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
'''
'''
#方法2:通过PostMessage的函数模拟按键
以上内容为大家介绍了自动化测试中的Python+Selenium处理Windows弹窗(非IE弹窗问题),本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/