【基于Python的Selenium2自动化测试】10 - 处理JS弹出对话框

文章目录

    • 10.1 处理alert对话框
    • 10.2 处理confirm对话框
    • 10.3 处理prompt对话框
    • 10.4 以百度搜索设置的弹出的弹窗为例

一般JS弹出对话框有三种:alert(一个按钮:确定),confirm(两个按钮:确定,取消),prompt(两个按钮 + 一个输入框)。

1.警告消息框(alert)
  警告消息框提供了一个 “确定” 按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。

2.确认消息框(confirm)

确认消息框向用户提示一个 “是与否” 问题,用户可以根据选择"确定"按钮和"取消"按钮。

3.提示消息对话(prompt)
  提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择 “确认” 会响应对应的提示信息,选择 “取消” 会关闭对话框。
  
selenium 提供了 switch_to.alert .的方法定位到 alert、confirm、prompt 对话框。使用 text/accept/dismiss/send_keys 进行相关操作,这里注意的是send_keys只能对 prompt 进行操作。

  • text : 返回 alert/confirm/prompt 中的文字信息。
  • accept : 点击确认按钮。
  • dismiss: 点击取消按钮,如果有的话。
  • send_keys(): 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。

下面以一个小小demo的HTML页面为例,来演示switch_to.alert的各种方法。

页面显示:
在这里插入图片描述
页面HTML源码:


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>title>
    head>
    <body>
        <div align="center">
        <h4>Selenium处理弹出框示例h4>
	<input type="button" onclick="showAlert()" value="提示弹窗按钮"/>
	<input type="button" onclick="showAlert2()" value="确认弹窗按钮"/>
        <input type="button" onclick="showPro()" value="输入框弹窗按钮"/><br><br><br>
        <span id="textSpan">span>       
        div>
    body>
    <script>
        function showAlert(){
            document.getElementById("textSpan").innerHTML="";
            alert("这是一个警告提示框!!!");
        }
        function showAlert2(){            
            document.getElementById("textSpan").innerHTML="";
            if(confirm("你是美女吗?")){
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您为何如

此自信?</font>";
            }else{
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您为何如

此谦虚?</font>";
            }
            
        }
        function showPro(){
            document.getElementById("textSpan").innerHTML="";
            con = prompt("输入数字1为你是好人,输入数字2为你是坏银");
            if(con==1){
                document.getElementById("textSpan").innerHTML="<font style='color: green;'>你真

是好人啊!!</font>";
            }else if(con==2){
                document.getElementById("textSpan").innerHTML="<font style='color: green;'>喜获

坏银一枚!!</font>";
            }else{
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您没有按

要求输入,请重新输入</font>";
            }
        }
    script>
html>

10.1 处理alert对话框

【代码】

#coding=utf-8
from selenium import webdriver
import time
import os

driver = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('alertdemo.html')
driver.get(file_path)

time.sleep(1)
# 定位alert对话框的按钮,点击按钮,弹出alert对话框
# driver.find_element_by_link_text("提示弹窗按钮").click()  # 这种方法定位不到
driver.find_element_by_xpath("/html/body/div/input[1]").click()

# 定位到alert弹出框,,并输出警告框的内容
print(driver.switch_to.alert.text)  # 输出:这是一个警告提示框!!!
time.sleep(2)
# alert弹出框是警告框,只能接受,才能继续操作
driver.switch_to.alert.accept()
time.sleep(2)
driver.quit()

运行结果:
【基于Python的Selenium2自动化测试】10 - 处理JS弹出对话框_第1张图片

10.2 处理confirm对话框

【代码】

#coding=utf-8
from selenium import webdriver
import time
import os

driver = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('alertdemo.html')
driver.get(file_path)

time.sleep(1)

## 第1次:点击【确定】
print("第一次:点击【确定】按钮")
# 定位confirm对话框的按钮,点击按钮,弹出confirm对话框
driver.find_element_by_xpath("/html/body/div/input[2]").click()

# 定位到confirm对话框,并输出对话框的内容
print(driver.switch_to.alert.text)  # 输出:你是美女吗?
driver.switch_to.alert.accept()  # 接受对话框
print(driver.find_element_by_xpath("//span[@id='textSpan']/font").text)
time.sleep(2)

# 第2次:点击【取消】
print("第二次:点击【取消】按钮")
# 再次定位confirm对话框的按钮,点击按钮,弹出confirm对话框
driver.find_element_by_xpath("/html/body/div/input[2]").click()
# 定位到confirm对话框,并输出对话框的内容
print(driver.switch_to.alert.text)  # 输出:你是美女吗?
driver.switch_to.alert.dismiss()  # 不接受对话框
print(driver.find_element_by_xpath("//span[@id='textSpan']/font").text)
time.sleep(2)

driver.quit()

运行结果:
【基于Python的Selenium2自动化测试】10 - 处理JS弹出对话框_第2张图片

10.3 处理prompt对话框

【代码】

#coding=utf-8
from selenium import webdriver
import time
import os

driver = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('alertdemo.html')
driver.get(file_path)

time.sleep(1)

print("第一次:输入数字 2 点击【确定】按钮")
# 定位prompt对话框的按钮,点击按钮,弹出prompt对话框
driver.find_element_by_xpath("/html/body/div/input[3]").click()
# 定位到prompt对话框,并输出对话框的内容
print(driver.switch_to.alert.text)  # 输出:输入数字1为你是好人,输入数字2为你是坏银
driver.switch_to.alert.send_keys('2') # 弹出框中输入数字 2
# 点击【确定】
driver.switch_to.alert.accept()
print(driver.find_element_by_xpath("//span[@id='textSpan']/font").text) # 输出:喜获坏银一枚!!
time.sleep(2)

print("第二次:输入非数字 1和2 点击【确定】按钮")
driver.find_element_by_xpath("/html/body/div/input[3]").click()
# 定位到prompt对话框,并输出对话框的内容
print(driver.switch_to.alert.text)  # 输出:输入数字1为你是好人,输入数字2为你是坏银
driver.switch_to.alert.send_keys('100') # 弹出框中输入数字 100
# 点击【确定】
driver.switch_to.alert.accept()
print(driver.find_element_by_xpath("//span[@id='textSpan']/font").text) # 输出:您没有按要求输入,请重新输入

'''下面测试【取消】按钮'''
print("第三次:直接点击【取消】按钮")
driver.find_element_by_xpath("/html/body/div/input[3]").click()
print(driver.switch_to.alert.text)  # 输出:输入数字1为你是好人,输入数字2为你是坏银
driver.switch_to.alert.dismiss()  # 关闭对话框
print(driver.find_element_by_xpath("//span[@id='textSpan']/font").text)  # 输出:您没有按要求输入,请重新输入

driver.quit()

运行结果:
【基于Python的Selenium2自动化测试】10 - 处理JS弹出对话框_第3张图片

10.4 以百度搜索设置的弹出的弹窗为例


百度搜索设置的弹出的弹窗是不能通过前端工具对其进行定位的,这个时候就可以通过switch_to.alert方法来接受这个弹窗,从而才能进行后续操作。

【代码】

# coding=utf-8
from selenium import webdriver
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains

import time

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

#鼠标悬停至“设置”链接
#link = driver.find_element_by_link_text("设置")   ----  这种方法定位不到 “设置”,只能靠xpath方法了
link = driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[3]/a[8]")
ActionChains(driver).move_to_element(link).perform()
time.sleep(5)

#打开搜索设置
driver.find_element_by_class_name("setpref").click()
time.sleep(3)

#点击保存设置按钮
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(3)

#接受警告框
driver.switch_to.alert.accept()

time.sleep(2)
driver.quit()

说明: 参考博客 python selenium-webdriver 处理JS弹出对话框(六)

你可能感兴趣的:(自动化测试,零基础学习自动化测试)