《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)

简介: 【4月更文挑战第20天】本文主要介绍了如何使用Selenium处理网页中的alert弹窗,包括accept()、dismiss()、getText()和sendKeys()等方法。文章首先简述了在前一篇文章中提及的switchTo()方法,然后详细讲解了alert弹窗的几个关键方法。接着,作者给出了一个名为ModalDialogueBox.html的测试页面,展示了警告框、确认框和提示框三种类型的模态对话框,并提供了相应的JavaScript代码。最后,文章提供了一个实际的项目实战案例,展示了如何在Java中使用Selenium处理alert弹窗,并给出了相关代码示例。

1.简介

在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题。很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭,有些可能有取消和确定按钮,还有些调查的alert框,可以运行用户输入文字,例如预定一个网站的资讯,输入邮箱地址就可以,每天接收一封该网站推送的邮件。

2.alert的几个方法

关于alert还有其他几个方法,如下图所示:

  accept()方法就是点击确定按钮。

  dismiss()就是点击alert框上面的取消按钮。

  getText()就是获取alert内部的文字,例如上面打印效果。

  sendKeys方法就像文章开头提到的输入邮件预定内容一样。

上边宏哥提到的这些弹窗其实有自己的名字,叫“模态框”。那宏哥先讲解什么模态框。

3.模态框的定义

  模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。

3.1警告框

警告框经常用于确保用户可以得到某些信息。

当警告框出现后,用户需要点击确定按钮才能继续进行操作。

语法:

alert("文本")

3.2确认框

确认框用于使用户可以验证或者接受某些信息。

当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

语法:

confirm("文本")

3.3提示框

提示框经常用于提示用户在进入页面前输入某个值。

当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

语法:

prompt("文本","默认值")

3.4测试页面准备

ModalDialogueBox.html页面参考代码如下:

DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>模态框title>

head>

<script type="text/javascript">

window.onload = function(){

   document.getElementById("input_1").onclick = function(){

       alert("您关注了‘北京宏哥’微信公众号!");

   };

   document.getElementById("input_2").onclick = function(){

       confirm("确定关注微信公众号:北京宏哥?")

   };

   document.getElementById("input_3").onclick = function(){

       prompt("请输入微信公众号:","北京宏哥");

   };

}


script>

<style>

.button1 {

   background-color: #f44336; 

   border: none;

   color: white;

   padding: 15px 32px;

   text-align: center;

   text-decoration: none;

   display: inline-block;

   font-size: 28px;

   margin-bottom: 100px;

   text-decoration:none;

   color: white;

}

.button {

   background-color: #4CAF50;

   border: none;

   color: white;

   padding: 15px 32px;

   text-align: center;

   text-decoration: none;

   display: inline-block;

   font-size: 16px;

   margin: 4px 2px;

   cursor: pointer;

}

#myAnchor

{

 text-decoration:none;

 color: white;

}

style>

<body>

   <div style=" text-align:center;">

       <div style="height: 100px;margin-top: 200px;">

           <button class="button1"><a id="myAnchor" href="https://www.cnblogs.com/du-hong/">北京-宏哥a>button>br>

           测试练习模态框的处理:<br><br>

           1.警告框

           <input class="button" type="button" id="input_1" value="点击弹出警告框"><br><br>

           2.确认框

           <input class="button" type="button" id="input_2" value="点击弹出确认框"><br><br>

           3.提示框

           <input class="button" type="button" id="input_3" value="点击弹出提示框"><br><br>

       div>

   div

>

html>

浏览器打开页面如下图所示:

3.5代码实现的参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.firefox.FirefoxDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)

*

* 2021年9月15日

*/

public class ModalDialogueBox {

   

   public static void main(String[] args) {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\geckodriver.exe");

       

       WebDriver driver =null;

       try {

           driver = new FirefoxDriver();

           driver.get("file:///C:/Users/DELL/Desktop/test/ModalDialogueBox.html");

           driver.manage().window().maximize();

           //1.点击弹出警告框

           driver.findElement(By.id("input_1")).click();

           Thread.sleep(3000);

           //1.1 处理弹出警告框

           System.out.println("获取警告框文本值:"+driver.switchTo().alert().getText());

           driver.switchTo().alert().accept();//模拟确认操作

           //2. 点击弹出确认框

           driver.findElement(By.id("input_2")).click();

           Thread.sleep(3000);

           //2.1 处理弹出确认框

           System.out.println("获取确认框文本值:"+driver.switchTo().alert().getText());

           driver.switchTo().alert().accept();//模拟确认操作

           //2.2 再次点击弹出确认框演示取消操作

           driver.findElement(By.id("input_2")).click();

           Thread.sleep(3000);

           driver.switchTo().alert().dismiss();//模拟取消操作

           //3.0 点击弹出提示框

           driver.findElement(By.id("input_3")).click();

           System.out.println("获取提示框文本值:"+driver.switchTo().alert().getText());

           Thread.sleep(3000);

           //3.1 处理弹出提示框

           driver.switchTo().alert().sendKeys("bjhg");

           Thread.sleep(3000);

           driver.switchTo().alert().accept();//模拟确认操作

           //3.2 再次点击弹出提示框演示取消操作

           driver.findElement(By.id("input_3")).click();

           Thread.sleep(3000);

           driver.switchTo().alert().dismiss();//模拟取消操作

           Thread.sleep(3000);

       } catch (Exception e) {

           e.printStackTrace();

       } finally{

           System.out.println("执行结束,关闭浏览器");

           driver.quit();

       }


   }


}

3.6运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.项目实战

以下是宏哥好不容易找到了一个alert例子(http://news.cyol.com/node_60799.htm),只有点击确定这个按钮,alert框才会消失。

4.1代码设计

4.2参考代码

package lessons;


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)

*

* 2021年9月15日

*/

public class Test {

   

   public static void main(String[] args) throws InterruptedException {

       

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  

       

       WebDriver driver = new ChromeDriver();  

   

       driver.manage().window().maximize();  

     

       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

         

       driver.get("http://news.cyol.com/node_60799.htm");  

     

       Thread.sleep(2000);

       

       // 处理alert框

       System.out.println(driver.switchTo().alert().getText());

      driver.switchTo().alert().accept();

   }    


}

4.3运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

5.小结

5.1driver.switchTo().alert().sendKeys("Hello") 不适用于最新的 chrome 驱动程序

  细心的童鞋或者小伙伴们可能会看到宏哥,在代码里用的是火狐浏览器,而不是Chrome浏览器。那是因为宏哥在Chrome 浏览器运行的时候,代码没有报错,但是却没有输入任何值,没有反应,switch_to.alert.send_keys′abc′ 操作没法输入进去。查了资料才知道是:driver.switchTo().alert().sendKeys("Hello") 不适用于最新的 chrome 驱动程序 详细细节可以看一下这个链接 https://stackoverflow.com/questions/43427241/driver-switchto-alert-sendkeyshello-not-working-for-latest-chrome-driver

5.2div盒子模拟的弹框

div盒子模拟的弹框,比如说百度的登录页面

对于这种弹窗,用alert是解决不了的,因为它是一个div盒子,可以看成是一个新的窗口,对于新的窗口我们需要用句柄的相关知识来解决,前边已经介绍过,这里宏哥就不再赘述了。好了时间不早了,今天就分享到这里!!!


每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关文章
|
14天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
14天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
14天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
14天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
27 2
|
22天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
21 5
|
23天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
61 2
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
63 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
13天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
38 4

热门文章

最新文章