web自动化测试第10步:获取浏览器弹窗alert、自定义弹窗以及其操作

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/CCGGAAG/article/details/76573857

在平时的测试中,有时候会遇到弹窗的问题,有的是浏览器弹窗(alert)、有的是自定义弹窗;这节我们主要来讨论一下关于浏览器弹窗和简单的自定义弹窗。

一、关于alert弹窗的方法

备注:部分方法为老写法,官方已经不推荐使用;点击这篇文章查看切换alert的新写法。

switch_to.alert(): 定位到alert弹窗,返回一个弹窗的对象

dismiss(): 对弹窗对象的取消操作(相当于点击弹窗上的取消按钮)

accept():对弹窗对象的确定操作(相当于点击弹窗上的确定按钮)

text:对弹窗对象,获取弹窗内的文本

send_keys(key):对弹窗对象内的输入框输入数据(如果弹窗的格式有输入框的话可以使用)

authenticate(name, pass):对于身份认证弹窗,输入用户名和密码并自动提交(一般可能会用于本地搭建的一些系统)如图:

认证信息

 

二、alert包的源码展示
 


 
 
  1. class Alert(object):
  2. """
  3. Allows to work with alerts.
  4. Use this class to interact with alert prompts. It contains methods for dismissing,
  5. accepting, inputting, and getting text from alert prompts.
  6. Accepting / Dismissing alert prompts::
  7. Alert(driver).accept()
  8. Alert(driver).dismiss()
  9. Inputting a value into an alert prompt:
  10. name_prompt = Alert(driver)
  11. name_prompt.send_keys("Willian Shakesphere")
  12. name_prompt.accept()
  13. Reading a the text of a prompt for verification:
  14. alert_text = Alert(driver).text
  15. self.assertEqual("Do you wish to quit?", alert_text)
  16. """
  17. def __init__(self, driver):
  18. """
  19. Creates a new Alert.
  20. :Args:
  21. - driver: The WebDriver instance which performs user actions.
  22. """
  23. self.driver = driver
  24. @property
  25. def text(self):
  26. """
  27. Gets the text of the Alert.
  28. """
  29. return self.driver.execute(Command.GET_ALERT_TEXT)[ "value"]
  30. def dismiss(self):
  31. """
  32. Dismisses the alert available.
  33. """
  34. self.driver.execute(Command.DISMISS_ALERT)
  35. def accept(self):
  36. """
  37. Accepts the alert available.
  38. Usage::
  39. Alert(driver).accept() # Confirm a alert dialog.
  40. """
  41. self.driver.execute(Command.ACCEPT_ALERT)
  42. def send_keys(self, keysToSend):
  43. """
  44. Send Keys to the Alert.
  45. :Args:
  46. - keysToSend: The text to be sent to Alert.
  47. """
  48. if self.driver.w3c:
  49. self.driver.execute(Command.SET_ALERT_VALUE, { 'value': keys_to_typing(keysToSend)})
  50. else:
  51. self.driver.execute(Command.SET_ALERT_VALUE, { 'text': keysToSend})
  52. def authenticate(self, username, password):
  53. """
  54. Send the username / password to an Authenticated dialog (like with Basic HTTP Auth).
  55. Implicitly 'clicks ok'
  56. Usage::
  57. driver.switch_to.alert.authenticate('cheese', 'secretGouda')
  58. :Args:
  59. -username: string to be set in the username section of the dialog
  60. -password: string to be set in the password section of the dialog
  61. """
  62. self.driver.execute(
  63. Command.SET_ALERT_CREDENTIALS,
  64. { 'username': username, 'password': password})
  65. self.accept()

 

三、实例展示:w3c的alert页面

因为目前使用alert页面的网站实在是不多,所以只好用w3c的页面来示范一下alert包中的方法,具体代码如下

alert-w3c

 


 
 
  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. driver.get( "http://www.w3school.com.cn/tiy/t.asp?f=jseg_prompt")
  5. # 通过frame的name值来定位
  6. driver.switch_to_frame( "i")
  7. # 点击按钮触发弹窗
  8. ele = driver.find_element_by_css_selector( "body > input[type='button']")
  9. ele.click()
  10. sleep( 2)
  11. # 定位到到弹窗
  12. a = driver.switch_to_alert()
  13. print(driver)
  14. # 获取弹窗的内容
  15. print(a.text)
  16. # 触发取消按钮
  17. a.dismiss()
  18. sleep( 2)
  19. # 再次点击按钮触发弹窗
  20. ele.click()
  21. # 在弹窗中的输入框输入数据
  22. a.send_keys( "许西城")
  23. sleep( 2)
  24. # 触发确认按钮
  25. a.accept()

 

这样就是alert的具体演示了

 

四、普通的隐藏弹窗

平时的话,我们一般遇到的都是自定义弹窗,所以说一般不是不用到alert的,但是还是要拿出来说一下的;一般这种自定义弹窗是自定义的div层,然后是隐藏的,所以当你触发了这个弹窗后,它就会显示出来,这时我们通过正常的定位方式是可以正常定位到的。

下面就主要看一下百度的登录弹窗

百度-登录

 

代码展示:

 


 
 
  1. from selenium import webdriver
  2. from time import sleep
  3. # 打开谷歌浏览器
  4. driver = webdriver.Chrome()
  5. # 输入网址并访问
  6. driver.get( "https://www.baidu.com/")
  7. # 点击登录按钮
  8. driver.find_element_by_css_selector( "#u1 > a.lb").click()
  9. sleep( 2)
  10. # 定位登录弹窗的输入框,并输入数据
  11. name_box = driver.find_element_by_css_selector( "#TANGRAM__PSP_10__userName")
  12. name_box.send_keys( "name")

 

新世界教育官网首页 大家能看到,图中的这种弹窗就是现在主流的表现形式,处理这种弹窗可以利用HTML DOM Style 对象,有一个display属性,可以设置元素如何被显示,详细解释可以参考http://www.w3school.com.cn/jsref/prop_style_display.asp。
将display的值设置成none就可以去除这个弹窗了:
js = 'document.getElementById("doyoo_monitor").style.display="none";'
完整代码如下:

# encoding:utf-8

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://sh.xsjedu.org/")
time.sleep(1)
js = 'document.getElementById("doyoo_monitor").style.display="none";'
driver.execute_script(js)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值