Selenium之_alert窗口与iframe框架定位

发表于:2019-7-24 13:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:王翔    来源:清风Python

  今天和大家说说alert与iframe框架早selenium定位中,存在的问题吧。
  很多网站,一些功能还在使用简陋的alert进行弹窗确认操作。但是selenium如何可以定位到js弹窗的内容呢?之前说到的那些id class 等等方法肯定是不行的。所以selenium针对这个问题,编写了单独的方法。
  driver.switch_to.alert(),源码可以看到alert = Alert(self._driver)
  Alert可用方法.png
  我们先来写一个义诊活动说明页面来看看alert的使用吧:
   <!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <title>alert与iframe</title>
  <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  <style type="text/css">
  .container {
  max-width: 650px;
  border: 2px solid grey;
  border-radius: 5px;
  }
  </style>
  </head>
  <body>
  <div class="container">
  <h2 class="text-center ">老中医亲情大回馈,义诊活动开始啦!</h2>
  <div>
  <p class="strong text-warning">欢迎各位父老乡亲前来就诊!请点击同意隐私获取授权:
  <a id='access' href="javascript:alert('我同意该条款.')">点我确认</a></p>
  </div>
  </div>
  </body>
  </html>
  下来看看alert的消息弹窗与获取窗口的实现吧:
  alert窗口定位.gif
  代码片段如下,so easy:
   ......
  driver.find_element_by_id('access').click()
  # 定位alert串口
  alert = driver.switch_to.alert
  time.sleep(1)
  # 打印alert的文本信息
  print(alert.text)
  # 点击alert确认按钮
  alert.accept()
  ......
  iframe窗体定位
  昨天写了一个老中医的问诊单,如果我们把它通过iframe添加到这个义诊活动的统一数内部,那么还可以使用简单的find_element去定位吗,但是否定的.....why?iframe是一个内联框架,你可以理解为浏览器的选项卡1中嵌套了选项卡2,你可以从选项卡1直接定位选项卡2中的内容么?必然不行....那么该如何?其实这个很简单。使用:driver.switch_to.frame()
  来样子看看frame的源码:
  frame源码.png
  我们可以先定位到这个iframe,然后吧这个定位节点传给frame方法,就可以进入到iframe中进行操作了。
   <iframe name="card" src="laozhongyi.html" width="600" ,
  height="600" frameborder="0"></iframe>
  总体代码如下:
   # -*- coding: utf-8 -*-
  # @Author   : 王翔
  # @JianShu  : 清风Python
  # @Date     : 2019/6/23 20:17
  # @Software : PyCharm
  # @version  :Python 3.7.3
  # @File     : Day5.1_alert&iframe.py
  from selenium import webdriver
  import time
  URL = 'file:///D:/Codes_Repository/Python/SeleniumTest/Day5_alert与iframe定位/index.html'
  options = webdriver.ChromeOptions()
  options.add_argument('window-size=700,800')
  options.add_argument('disable-infobars')
  driver = webdriver.Chrome(options=options)
  driver.get(URL)
  time.sleep(1)
  driver.find_element_by_id('access').click()
  alert = driver.switch_to.alert
  time.sleep(1)
  print(alert.text)
  alert.accept()
  # 由于给定了ifram的name,我们直接可以通过它的name进行定位
  driver.switch_to.frame("card")
  driver.find_element_by_id('name').send_keys("隔壁老王")
  time.sleep(1)
  driver.close()
  实现效果:
  alert与iframe窗口定位.gif

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号