51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 938|回复: 0
打印 上一主题 下一主题

[selenium] Selenium浏览器弹窗操作实战

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:05
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-11-23 14:04:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1、浏览器自带弹窗操作
      说明:
      webdriver中处理JavaScript所生成的alert、confirm以及prompt弹窗是很简单的。具体思路是使用switch_to.alert()方法定位到alert/confirm/prompt弹窗。然后使用text/accept/dismiss/send_keys方法按需进行操做。
      常用操作:

    示例:
      页面代码片段:
    1.  <!DOCTYPE html>
    2.   <html lang="zh-cn">
    3.   <head>
    4.       <meta charset="UTF-8">
    5.       <style type="text/css">
    6.           button {
    7.               padding: 8px;
    8.               background: #f8f8f8;
    9.               border-radius: 5px
    10.           }
    11.       </style>
    12.   </head>
    13.   <body>
    14.   <button type="button_alert" value="alert" id="alert" onclick="al()">button_alert</button>
    15.   <br>
    16.   <button type="button_confirm" value="confirm" id="confirm" onclick="con()">button_confirm</button>
    17.   <br>
    18.   <button type="button_prompt" value="prompt" id="prompt" onclick="pro()">button_prompt</button>
    19.   <br>
    20.   
    21.   <script>
    22.       function al() {
    23.           alert('你是一个懂得爱自己的人!')
    24.       }
    25.   
    26.       function con() {
    27.           confirm('你是一个懂得爱自己的人?')
    28.       }
    29.   
    30.       function pro() {
    31.           prompt('请对自己说一句话!')
    32.       }
    33.   </script>
    34.   </body>
    35.   </html>
    复制代码


    脚本代码:
    1.  """
    2.   1.学习目标:
    3.       掌握浏览器自带弹窗的处理方法
    4.   2.语法(操作步骤):
    5.       2.1 操作触发弹窗的元素
    6.       2.2 获取弹窗(进入弹窗)
    7.           alert = driver.switch_to.alert
    8.       2.3 操作弹窗
    9.           alert.text   获取弹窗文本
    10.           alert.accept() 点击弹窗确定按钮
    11.           alert.dismiss() 点击弹窗取消按钮
    12.           alert.send_keys("输入内容") 在弹窗中输入文字
    13.   3.需求
    14.       在页面中,操作浏览器自带弹窗
    15.   """
    16.   # 1.导入selenium
    17.   from selenium import webdriver
    18.   from time import sleep
    19.   import os
    20.   
    21.   # 2.打开浏览器
    22.   driver = webdriver.Firefox()
    23.   
    24.   # 3.打开页面
    25.   url = "file:///" + os.path.abspath("./1.html")
    26.   driver.get(url)
    27.   sleep(2)
    28.   
    29.   # 4.处理浏览器自带弹窗
    30.   # 4.1 触发弹窗的元素button_alert,完成text和accept()方法
    31.   # 4.1.1 定位alert按钮,触发弹窗
    32.   el = driver.find_element_by_id("alert")
    33.   el.click()
    34.   sleep(2)
    35.   
    36.   # 4.1.2 获取弹窗(进入弹窗)
    37.   alert = driver.switch_to.alert
    38.   
    39.   # 4.1.3 获取弹窗文本值
    40.   print("弹窗文本值:", alert.text)
    41.   
    42.   # 4.1.4 点击弹窗确定按钮
    43.   alert.accept()
    44.   sleep(2)
    45.   
    46.   # 4.2 触发弹窗的元素button_confirm,完成dismiss()方法
    47.   # 4.2.1 定位confirm按钮,触发弹窗
    48.   el = driver.find_element_by_id("confirm")
    49.   el.click()
    50.   sleep(2)
    51.   
    52.   # 4.2.2 获取弹窗(进入弹窗)
    53.   confirm = driver.switch_to.alert
    54.   
    55.   # 4.2.3 获取弹窗文本值
    56.   print("弹窗文本值:", confirm.text)
    57.   
    58.   # 4.2.4 点击弹窗取消按钮
    59.   confirm.dismiss()
    60.   sleep(2)
    61.   
    62.   # 4.3 触发弹窗的元素button_prompt,完成send_keys("输入内容")方法
    63.   # 4.3.1 定位prompt按钮,触发弹窗
    64.   el = driver.find_element_by_id("prompt")
    65.   el.click()
    66.   sleep(2)
    67.   
    68.   # 4.3.2 获取弹窗(进入弹窗)
    69.   prompt = driver.switch_to.alert
    70.   
    71.   # 4.3.3 获取弹窗文本值
    72.   print("弹窗文本值:", prompt.text)
    73.   
    74.   # 4.3.4 点击弹窗确定按钮
    75.   prompt.send_keys("怎么显示不了")
    76.   sleep(2)
    77.   
    78.   # 4.3.5 点击弹窗确定按钮
    79.   prompt.accept()
    80.   sleep(2)
    81.   
    82.   # 5.关闭浏览器
    83.   driver.quit()
    复制代码


    注意:prompt弹窗输入框,Chrome不显示输入文本。
      Python版本 3.7.7
      ·Edge版本:18.18362,没有问题。
      · Firefox版本:76.0.1 (64 位),没有问题。
      · Chrome版本:74.0.3729.131(正式版本)32位,有问题。
      2、页面自定义弹窗操作
      由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS方法来进行处理。
      需求:
      需求:去掉淘宝首页的自定义弹窗。
      淘宝首页的自定义弹窗如下:

    提示:网页中弹出的对话框,也属于页面自定义弹窗,都可以用下面方式处理。
      实现方式:
      大家能看到,上图中的这种弹窗就是自定义弹窗的表现形式,处理这种弹窗可以利用HTML、DOM、Style对象中的一个display属性来处理,可以设置元素如何被显示。
      将display的值设置成none:此元素不会被显示,就可以去除这个弹窗了。
      注意:手动页面刷新之后还会出现弹窗。
      步骤如下:
    1. # JavaScript语法
    2.   js = 'document.getElementById("div_company_mini").style.display="none";'
    3.   
    4.   # 使用Python执行JS语句
    5.   driver.execute_script(js1)
    复制代码


     提示:
      document.getElementById()是JS获取元素的方式,在JS获取元素方式中,就只有ById()获取的是一个元素。
      其他获取元素的方式,都获取的是结果集,需要获取具体元素的时候,注意要使用索引。
      简单举例:
      1. 通过ID获取(getElementById)
      2. 通过name属性(getElementsByName)
      3. 通过标签名(getElementsByTagName)
      4. 通过类名(getElementsByClassName)
      示例:
    1.  """
    2.   1.学习目标:
    3.       了解关闭web页面自定义弹窗
    4.   2.语法(操作步骤)
    5.       2.1 找到自定义弹窗的元素,
    6.           修改样式:tyle.display='none'
    7.           display='none'表示不显示样式,目的是将弹窗隐藏
    8.       2.2 操作步骤
    9.           js = document.getElementById("id属性值").style.display="none"
    10.           或者其他的JS获取元素方式
    11.           driver.execute_script(js)
    12.   3.需求
    13.       隐藏页面自定义弹窗
    14.   """
    15.   # 1.导入selenium
    16.   from selenium import webdriver
    17.   from time import sleep
    18.   
    19.   # 2.打开浏览器
    20.   driver = webdriver.Chrome()
    21.   
    22.   # 3.打开页面
    23.   url = "https://www.taobao.com/"
    24.   driver.get(url)
    25.   sleep(5)
    26.   
    27.   # 4.关闭自定义弹窗
    28.   js = 'document.querySelector("body > div.tbh-fixedtool.J_Module > div").style.display="none"'
    29.   driver.execute_script(js)
    30.   sleep(2)
    31.   
    32.   # 5.关闭浏览器
    33.   driver.quit()
    复制代码







    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-19 02:40 , Processed in 0.061820 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表