0


谈谈Selenium中的三种切换之alert

一、如何识别

  • 识别方法:alert中的确定、取消、输入框无法用inspector定位到,当然还有一些特例。
  • alert分为三种- alert- confirm- prompt
  • 分别对应3个js的命令(可在chrome的console面板中调试)- alert(‘确认’)

  • confirm(‘确认或取消’)

  • prompt(‘输入信息后确认或取消’)

二、selenium中如何处理

示例的demo_alert.html

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>alert</title><script>functionshow_confirm(){var r=confirm("请选择!");if(r==true){
              document.write("你选择了确定!");}else{
              document.write("你选择了取消!");}}</script></head><body><divid="div1"><inputtype="button"id="alert"value='alert'onclick="alert('欢迎来到松勤软件测试')"><inputtype="button"id="confirm"value='confirm'onclick="show_confirm('请选择你的操作')"><inputtype="button"id="prompt"value='prompt'onclick="var name =prompt('请输入你的名字:');document.write(name)"></div></body></html>
  • 效果如图所示,点击三个按钮会弹出之前说明的3种对话框

selenium的api

  • 首先我们打开这个本地文件# 1. 导入selenium的webdriver模块from selenium import webdriver# 2. 打开chrome浏览器driver = webdriver.Chrome()# 3. 打开本地html,如果用firefox打开,需要加上file:///# driver.get(r'file:///D:\demo\demo_alert.html')driver.get(r'D:\demo\demo_alert.html')

alert切换

  • 点击alert元素# 4. 点击alert元素(其id属性值为alert ==> <input type="button" id="alert" ...driver.find_element('id','alert').click()
  • 切换并点击确定# 弹出alert对话框driver.find_element('id','alert').click()from time import sleepsleep(1)# 5. 切换并点击确定driver.switch_to.alert.accept()
  • sleep需要加,不加的话你看不到效果,实际项目中不建议加

confirm切换

  • 点击confirm元素# 4. 点击confirm元素(其id属性值为confirm ==> <input type="button" id="confirm" ...# 弹出confirm对话框driver.find_element('id','confirm').click()
  • 切换并点击确定或取消from time import sleepsleep(1)# 5. 切换并点击取消driver.switch_to.alert.dismiss()# 如果要点击确定# driver.switch_to.alert.accept()
  • 在打开的网页中你能看到你选择了取消!

prompt切换

  • 点击prompt元素# 4. 点击prompt元素(其id属性值为prompt ==> <input type="button" id="prompt" ...# 弹出prompt对话框driver.find_element('id','prompt').click()
  • 切换并输入内容from time import sleepsleep(1)# 5. 切换并输入内容driver.switch_to.alert.send_keys('hello world')
  • 此时观察网页,你会发现,并没有如预期般输入内容
  • 如果你继续,点击确定# 6. 切换并点击确定driver.switch_to.alert.accept()
  • 你会在网页中看到hello world
  • 说明实际是写的,但在chrome中弹出的prompt对话框中并不能看到这个信息
  • 如果换成firefox是可以看到效果的,完整代码如下from selenium import webdriverdriver = webdriver.Firefox()driver.get(r'file:///D:\demo\demo_alert.html')driver.find_element('id','prompt').click()from time import sleepsleep(1)driver.switch_to.alert.send_keys('hello world')driver.switch_to.alert.accept()

另外一种切换方式Alert

  • selenium还提供了另外一种方式来操作alert类型元素from selenium.webdriver.common.alert import AlertAlert(driver).accept()# 跟driver.switch_to.alert.accept()是等价的
  • 依次类推Alert(driver).dismiss()Alert(driver).send_keys('hello')

稳定的切换

  • 由于涉及到弹窗,总是会有不稳定的情况出现,这时候显式等待就可以发挥它的作用了# ... 前面的代码不写了driver.find_element('id','alert').click()from time import sleepsleep(1)from selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECWebDriverWait(driver,5,0.5).until(EC.alert_is_present()).accept()
  • 你需要有一定的显式等待基础

源码说明

  • alert_is_presentclassalert_is_present(object):""" Expect an alert to be present."""def__init__(self):passdef__call__(self, driver):try: alert = driver.switch_to.alert return alert # 正常捕获到alert的话,返回的是driver.switch_to.alert,所以显式等待后就直接用.accept()except NoAlertPresentException:returnFalse
  • driver.switch_to.alert点击alert@propertydefalert(self):# 方法""" Switches focus to an alert on the page. :Usage: alert = driver.switch_to.alert """ alert = Alert(self._driver)# 本质还是用的Alert() alert.text # 不知道他要这个做啥return alert

三、补充说明

  • 打开iqiyi.com你可能会看到这样的弹出框,这个并非alert,虽然他也无法用inspector找到元素。这种弹框的处理要用selenium提供的option禁止显示

  • 我司提供的一个案例:点击confirm(elementUI风格)按钮,你用inspector移动到元素上就能看到这个元素的属性,说明就不是一个alert

  • 一个同学提供的素材:弹出框也不是网页的元素,但这也不是alert。


本文转载自: https://blog.csdn.net/Mantou023/article/details/135010763
版权归原作者 wuxianfeng023 所有, 如有侵权,请联系我们删除。

“谈谈Selenium中的三种切换之alert”的评论:

还没有评论