专栏首页用户7466307的专栏WebDriverIO教程:处理Selenium中的警报和覆盖

WebDriverIO教程:处理Selenium中的警报和覆盖

在此有关Selenium中警报处理的WebDriverIO教程中,我将向您展示如何在WebDriverIO中处理警报和弹出窗口以及叠加模式。我还将介绍自动化期间将要遇到的各种类型的警报,以及使用WebDriverIO在Selenium中处理警报时需要遵循的关键点。

WebDriverIO中的警报类型

警报和弹出窗口在任何网站开发中都很常见,并且在执行Selenium测试自动化时,您也必须处理它们。这些警报或JavaScript警报会弹出,使您的注意力从当前的浏览器上移开,并迫使您阅读它们。如果您不知道如何处理警报,则将无法执行任何进一步的浏览器操作,这对于手动和自动都适用。

重要的是要注意,您无法使用devtools或XPath来识别警报。另外,由于不能将它们作为窗口来处理,这就是为什么要处理它们有些棘手的原因,但是请不要担心,您可以在本WebDriverIo教程的后面部分中找到更多有关此的信息。

WebDriverIO中需要处理三种警报。

  1. 警报弹出
  2. 确认提示
  3. 提示弹出

警报弹出窗口

弹出警报或alert()方法将显示一个仅带有消息和“确定”按钮的警报框。该警报用于通知用户一些信息。信息文本仅显示一个按钮“确定”。在此,用户只有一个选项可以按“确定”按钮。以下是警报弹出的示例。

确认提示

确认警报是带有消息的第二种警报,它使用户可以选择按“确定”或“取消”。这是确认警报的示例。

提示弹出

弹出的提示是最后一个警报,用于提醒用户输入网站信息。在这里,用户可以进行输入并按OK(确定)按钮或按Cancel(取消)以避免输入。以下是弹出提示的示例。

除了这些内置的javascript警报之外,还有一个弹出窗口称为“模式”。警报和模式警报之间的主要区别在于,如果没有请求的操作(如“确定”或“取消”),警报将不会发出。在模式中,< div >通过提供特殊的CSS代码使用标记来完成。单击模态以外的其他位置可以关闭该模态。

叠加模态

该模式是使用客户端框架(例如,引导程序,ReactJS)构建的。开发人员可以用来显示一些信息,弹出窗口和表格。没有特别的

这是叠加模式的示例:

现在,您已经熟悉javascript中可用的另一种警报和模式。在本WebDriverIO教程中,我将向您展示有关Selenium中警报处理的更多信息。

WebDriverIO教程:运行第一个自动化脚本

使用WebDriverIO在Selenium中处理警报

如果您熟悉Selenium在其他框架中的自动化测试中的警报处理,那么您会假定必须先切换到警报,然后再在Selenium中进行警报处理。例如,在Java中,您必须创建switchTo()方法,然后需要访问alert()方法以执行操作。

例如,

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

同样,也可以访问dismiss()和sendkeys()方法。

由于您无需在Selenium中处理警报之前就使用switchTo()方法,因此执行Selenium测试自动化会稍微容易一些。

在Selenium中进行警报处理以进行自动浏览器测试所需的方法是:

  • acceptAlert()
  • dismissAlert()
  • getAlertText()
  • sendAlertText()
  • isAlertOpen()

WebDriverIO的最大优点是可以从驱动程序或浏览器对象直接访问警报,以实现Selenium测试自动化。例如

browser.acceptAlert();
browser.dismissAlert();
browser.getAlertText();
browser.sendAlertText();
browser.isAlertOpen();

acceptAlert()

acceptAlert()方法类似于 driver.switchTo()。alert()。accept() 硒Java。它可以帮助用户单击“警报”弹出窗口上的“确定”按钮。

句法:

browser.acceptAlert();

例:

describe("这是警报弹出的示例 ", function () {
   it("Simple Alert pop up", function () {
       browser.url("http://the-internet.herokuapp.com/");
       browser.pause(5000);
       $("=JavaScript Alerts").click();
       browser.pause(5000);
       $(".//button[text()='点击JS警报']").click();
       browser.pause(5000);
       browser.acceptAlert();
       browser.pause(5000);
   });
});

dismissAlert()

dismissAlert()方法用于单击“取消”按钮。如果将此方法与In selenium java进行比较,则它类似于driver.switchTo()。alert()。dismiss()

句法:

browser.dismissAlert();

例:

describe("这是警报弹出的示例 ", function () {
   it("comfirmation pop up", function () {
       browser.url("http://the-internet.herokuapp.com/");
       browser.pause(5000);
       $("=JavaScript Alerts").click();
       browser.pause(5000);
       $(".//button[text()='Click for JS Confirm']").click();
       browser.pause(5000);
       browser.dismissAlert();
       browser.pause(5000);
   });
});

getAlertText()

getAlertText()方法用于读取弹出消息。这类似于 Selnium java中的driver.switchTo ()。alert()。getText()。

句法:

browser.getAlertText();

例:

describe("这是警报弹出的示例 ", function () {
    it("getAlertText() pop up", function () {
       browser.url("http://the-internet.herokuapp.com/");
       browser.pause(5000);
       $("=JavaScript Alerts").click();
       browser.pause(5000);
       $(".//button[text()='Click for JS Confirm']").click();
       browser.pause(5000);
       const msg = browser.getAlertText();
       console.log(msg);
       browser.pause(5000);
       browser.acceptAlert();
       browser.pause(5000);
   });
});

isAlertOpen()

isAlertOpen()方法用于检查警报是否可见。此方法将布尔值返回给用户,并且用户可以基于此布尔值做出决定。

Syntex:

browser.isAlertOpen()

例:

describe("T这是警报弹出的示例 ", function () { 
  it("sendAlertText() Pop up ", function () {
       browser.url("http://the-internet.herokuapp.com/");
       browser.pause(5000);
       $("=JavaScript Alerts").click();
       browser.pause(5000);
       $(".//button[text()='点击JS提示']").click();
       browser.pause(5000);
       browser.sendAlertText("这是输入文本");
       browser.pause(5000);
       browser.acceptAlert();
       browser.pause(5000);
   });
});

使用WebDriverIO处理覆盖模态

到目前为止,您已经在此WebDriverIO教程中了解了Alerts和Overlay Modal之间的区别。警报只能通过预期的操作关闭,而覆盖模式可以通过单击背景上的任意位置来关闭。现在,我将向您展示如何使用WebDriverIO自动执行叠加模态。

当自动化模态时,您不必处理特殊的代码或类。您只需使用WebDriverIO选择器直接找到元素的对象并执行操作。

这是使用WebDriverIO处理Selenium中的Overlay Modal的方法。

describe("这是警报弹出的示例 ", function () {
   it("Handle Modal pop up", function () {
       browser.url("https://jquerymodal.com/");
       browser.pause(5000);
       $(".//a[@href='#ex1']").click();
       browser.pause(5000);
       $(".//a[@href='#close-modal']").click();
   });
});

本文分享自微信公众号 - 软件测试test(gh_d29759b02f67),作者:Coldrain

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Selenium WebDriver,Python和Chrome编写您的第一个Web测试

    准备好WebDriver后,让我们编写第一个Web测试!测试将是一个简单的DuckDuckGo搜索。DuckDuckGo是一个不跟踪用户数据的搜索引擎。就像任何...

    用户7466307
  • 如何在Selenium WebDriver中处理Web表?

    在需要以表格格式显示信息的情况下,通常使用Web表或数据表。本质上,显示的数据可以是静态的也可以是动态的。您经常会在电子商务门户网站中看到这样的示例,其中产品规...

    用户7466307
  • Selenium 4.0-最新的测试自动化工具

    Selenium是业界领先的测试自动化工具之一,可以最大限度地实现测试自动化的目的。第一个Selenium工具于2004年作为Selenium Core推出。该...

    用户7466307
  • Ubuntu16.04 配置OpenCV3.4.2及基本使用

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效...

    FPGA开源工作室
  • Go包和依赖管理

    示例:go get -u https://github.com/easierway/concurrent_map

    gaobinzhan
  • Python建立SSH连接的方法

          我需要实现一个Windows下远程连接到SSH服务器执行命令的功能,所以就在网上找资料。我的环境是:Windows7 64位,Python 2.7 ...

    py3study
  • 判断语句

    算术运算符:+ - * / % ++ -- 一元运算符:++ -- ! 逻辑运算符:&||! 比较运算符 == === != > < >= <= ...

    河湾欢儿
  • 浅谈神经机器翻译

    由于人类语言的流动性, 自动翻译或者机器翻译可能是最具挑战性的人工智能任务之一.20世纪90年代, 统计方法被用于完成这项任务, 取代了此前传统上的基于语法规则...

    FesonX
  • 初识Pandas

    江湖上流传着这么一句话——分析不识潘大师(PANDAS),纵是老手也枉然。 Pandas是基于Numpy的专业数据分析工具,可以灵活高效的处理各种数据集,也是我...

    py3study
  • JavaScript 进阶知识 - 特效篇(二)

    对于有滚动条的盒子,可以使用onscroll注册滚动事件,每滚动一像素,就会触发该事件。

    前端博客 : alili.tech

扫码关注云+社区

领取腾讯云代金券