多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

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)

Python+Selenium处理Windows弹窗(非IE弹窗问题)-自动化测试

  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/

联系电话

17727591462

返回顶部