精华内容
下载资源
问答
  • Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法。 明确知道系统哪个地方会弹alert 常规处理,该...

    这篇文章写的很详细。。。所以转载了。

    Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法。

    明确知道系统哪个地方会弹alert

    • 常规处理,该方法只是对弹出的alert弹框进行了捕获和处理
    @Test(enabled = false)
        public void ff1() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            Alert alt = driver.switchTo().alert();
            alt.accept();
        }
    • 捕获时增加智能等待,该方法对弹出的alert弹框进行智能等待,避免了NoAlertPresentException异常的抛出
        @Test(enabled = false)
        public void ff2() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            WebDriverWait wait = new WebDriverWait(driver, 10);
            try {
                Alert alert = wait.until(new ExpectedCondition<Alert>() {
                    @Override
                    public Alert apply(WebDriver driver) {
                        try {
                            return driver.switchTo().alert();
                        } catch (NoAlertPresentException e) {
                            return null;
                        }
                    }
                });
                alert.accept();
            } catch (NullPointerException e) {
                /* Ignore */
                System.out.println("ff2 nullpoint");
            }
        }
    • 捕获和处理alert时都增加判断,使用selenium自带的ExpectedConditions
        @Test(enabled = false)
        public void ff3() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            boolean flag = false;
            Alert alert = null;
            try {
    
                new WebDriverWait(driver, 10).until(ExpectedConditions
                        .alertIsPresent());
                alert = driver.switchTo().alert();
                flag = true;
                // alert.accept();
            } catch (NoAlertPresentException NofindAlert) {
                // TODO: handle exception
    
                NofindAlert.printStackTrace();
                // throw NofindAlert;
            }
    
            if (flag) {
                alert.accept();
            }
        }

    以上的几种方法都是自己知道哪个地方要弹alert,所以在代码的某处对alert进行捕获,但是有时候我们并不知道哪个地方会弹alert弹框,这样就会导致我们没有进行捕获代码抛出了

    UnexpectedAlertBehaviour异常,下面我们来看下怎么解决这个问题。

    不清楚系统哪个地方会弹alert

    • 对整个正常代码进行异常捕获,写进try里,然后catchUnexpectedAlertBehaviour
        @Test(enabled = false)
        public void ff4() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            try {
                System.out.println("ff4正常处理代码1");
                driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            } catch (UnhandledAlertException e) {
                // TODO: handle exception
                driver.switchTo().alert().accept();
                System.out.println("ff4进入UnhandledAlertException异常");
            }
            System.out.println("ff4正常处理代码2");
        }

    这样写,代码量大的话,需要都加,代码会很冗余,不建议使用

    • 实现事件监听接口WebDriverEventListener,alert一般是在click事件之后触发的,所以在afterClickOn方法中对alert进行捕获
    @Override
        public void afterClickOn(WebElement arg0, WebDriver arg1) {
            // TODO Auto-generated method stub
            boolean flag = false;
            Alert alert = null;
            try {
    
                new WebDriverWait(arg1, 10).until(ExpectedConditions
                        .alertIsPresent());
                alert = arg1.switchTo().alert();
                flag = true;
                // alert.accept();
            } catch (NoAlertPresentException NofindAlert) {
                // TODO: handle exception
    
                NofindAlert.printStackTrace();
                // throw NofindAlert;
            }
    
            if (flag) {
                alert.accept();
            }
    
        }
    • 在初始化webdriver时对alert弹框进行全局设置
        @Test(enabled = false)
        public void ff5() {
            System.setProperty(key, value);
            DesiredCapabilities dc = new DesiredCapabilities();
            dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,
                    UnexpectedAlertBehaviour.ACCEPT);
            driver = new ChromeDriver(dc);
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
        }
    • 实现ITestListener接口,对代码可能会抛出的UnexpectedAlertBehaviour异常进行捕获

    1.新建AlertListner类实现ITestListener,并重写onTestFailure方法

        @Override
        public void onTestFailure(ITestResult result) {
            // TODO Auto-generated method stub
            System.out.println("into failure test");
            Throwable throwable = result.getThrowable();
            if(throwable instanceof UnhandledAlertException) {
                System.out.println("get UnhandledAlertException la"+throwable.toString());
                AlertListnerTest tb = (AlertListnerTest) result.getInstance();
                WebDriver driver = tb.getDriver(); 
                Alert alert = null;
                boolean flag = false;
                try {
                    
                    new WebDriverWait(driver,10).until(ExpectedConditions.alertIsPresent());
                    alert = driver.switchTo().alert();
                    flag = true;
                    //alert.accept();
                } catch (NoAlertPresentException NofindAlert) {
                    // TODO: handle exception
                    System.out.println("进入onfail 异常catch");
                    NofindAlert.printStackTrace();
                    //throw NofindAlert;
                }
                
                if(flag) {
                    alert.accept();
                }
                
            }

    2.再建一个测试类,在类前面一行加入监听@Listeners({ com.elong.air.tools.AlertListner.class }) ,测试类只需要写正常代码,不需要对可能会弹alert的弹框进行处理。

        @Test
        public void ff6() {
            System.out.println("jinru ff6test");
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            
            driver.findElement(By.xpath("//*[@id='alert']/input"));
        }

    最后这个方法还存在瑕疵,需要后续优化,欢迎读者提出改进意见。

    http://www.cnblogs.com/qiaoyeye/

    展开全文
  • web自动化之alert弹框

    千次阅读 2019-05-31 22:47:04
    什么是alert弹框呢? F12定位不到元素的弹出框,一般称之为alert弹出框,因为它不是html元素。如下图: 这种F12定位不到 针对这种我们怎么做呢? 哎~ selenium里提供了switch_to.alert方法供我们使用。具体代码如下...

    什么是alert弹框呢?
    F12定位不到元素的弹出框,一般称之为alert弹出框,因为它不是html元素。如下图: 这种F12定位不到

    在这里插入图片描述

    针对这种我们怎么做呢?
    哎~ selenium里提供了switch_to.alert方法供我们使用。具体代码如下

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("http://u.lrswl.com/?action=login")
    
    #点击登入
    driver.find_element_by_xpath('//td//input[@name="image"]').click()
    
    #等待alert弹出框
    WebDriverWait(driver,20).until(EC.alert_is_present())
    
    #切换
    alert = driver.switch_to.alert
    
    #点击确定,使弹出框消失
    alert.accept()
    

    alert 不止.accept() 方法,还有:
     alert.text – 获取alert弹框的文本内容
     alert.accept() —点击确定
     alert.dismiss() — 点击取消
     alert.send_keys() —输入内容

    题外话:
    selenium当中的元素,有四个基本的操作。
    1、click()
    2、send_keys()
    3、WebElement对象.text # 文本
    4、WebElement对象.get_attribute(属性名称) # 属性获取

    展开全文
  • Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法。 明确知道系统哪个地方会弹alert 常规处理,该...

    Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法。

    明确知道系统哪个地方会弹alert

    • 常规处理,该方法只是对弹出的alert弹框进行了捕获和处理
    @Test(enabled = false)
        public void ff1() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            Alert alt = driver.switchTo().alert();
            alt.accept();
        }
    • 捕获时增加智能等待,该方法对弹出的alert弹框进行智能等待,避免了NoAlertPresentException异常的抛出
        @Test(enabled = false)
        public void ff2() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            WebDriverWait wait = new WebDriverWait(driver, 10);
            try {
                Alert alert = wait.until(new ExpectedCondition<Alert>() {
                    @Override
                    public Alert apply(WebDriver driver) {
                        try {
                            return driver.switchTo().alert();
                        } catch (NoAlertPresentException e) {
                            return null;
                        }
                    }
                });
                alert.accept();
            } catch (NullPointerException e) {
                /* Ignore */
                System.out.println("ff2 nullpoint");
            }
        }
    • 捕获和处理alert时都增加判断,使用selenium自带的ExpectedConditions
        @Test(enabled = false)
        public void ff3() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            boolean flag = false;
            Alert alert = null;
            try {
    
                new WebDriverWait(driver, 10).until(ExpectedConditions
                        .alertIsPresent());
                alert = driver.switchTo().alert();
                flag = true;
                // alert.accept();
            } catch (NoAlertPresentException NofindAlert) {
                // TODO: handle exception
    
                NofindAlert.printStackTrace();
                // throw NofindAlert;
            }
    
            if (flag) {
                alert.accept();
            }
        }

    以上的几种方法都是自己知道哪个地方要弹alert,所以在代码的某处对alert进行捕获,但是有时候我们并不知道哪个地方会弹alert弹框,这样就会导致我们没有进行捕获代码抛出了

    UnexpectedAlertBehaviour异常,下面我们来看下怎么解决这个问题。

    不清楚系统哪个地方会弹alert

    • 对整个正常代码进行异常捕获,写进try里,然后catchUnexpectedAlertBehaviour
        @Test(enabled = false)
        public void ff4() {
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            try {
                System.out.println("ff4正常处理代码1");
                driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            } catch (UnhandledAlertException e) {
                // TODO: handle exception
                driver.switchTo().alert().accept();
                System.out.println("ff4进入UnhandledAlertException异常");
            }
            System.out.println("ff4正常处理代码2");
        }

    这样写,代码量大的话,需要都加,代码会很冗余,不建议使用

    • 实现事件监听接口WebDriverEventListener,alert一般是在click事件之后触发的,所以在afterClickOn方法中对alert进行捕获
    @Override
        public void afterClickOn(WebElement arg0, WebDriver arg1) {
            // TODO Auto-generated method stub
            boolean flag = false;
            Alert alert = null;
            try {
    
                new WebDriverWait(arg1, 10).until(ExpectedConditions
                        .alertIsPresent());
                alert = arg1.switchTo().alert();
                flag = true;
                // alert.accept();
            } catch (NoAlertPresentException NofindAlert) {
                // TODO: handle exception
    
                NofindAlert.printStackTrace();
                // throw NofindAlert;
            }
    
            if (flag) {
                alert.accept();
            }
    
        }
    • 在初始化webdriver时对alert弹框进行全局设置
        @Test(enabled = false)
        public void ff5() {
            System.setProperty(key, value);
            DesiredCapabilities dc = new DesiredCapabilities();
            dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,
                    UnexpectedAlertBehaviour.ACCEPT);
            driver = new ChromeDriver(dc);
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
    
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
        }
    • 实现ITestListener接口,对代码可能会抛出的UnexpectedAlertBehaviour异常进行捕获

    1.新建AlertListner类实现ITestListener,并重写onTestFailure方法

        @Override
        public void onTestFailure(ITestResult result) {
            // TODO Auto-generated method stub
            System.out.println("into failure test");
            Throwable throwable = result.getThrowable();
            if(throwable instanceof UnhandledAlertException) {
                System.out.println("get UnhandledAlertException la"+throwable.toString());
                AlertListnerTest tb = (AlertListnerTest) result.getInstance();
                WebDriver driver = tb.getDriver(); 
                Alert alert = null;
                boolean flag = false;
                try {
                    
                    new WebDriverWait(driver,10).until(ExpectedConditions.alertIsPresent());
                    alert = driver.switchTo().alert();
                    flag = true;
                    //alert.accept();
                } catch (NoAlertPresentException NofindAlert) {
                    // TODO: handle exception
                    System.out.println("进入onfail 异常catch");
                    NofindAlert.printStackTrace();
                    //throw NofindAlert;
                }
                
                if(flag) {
                    alert.accept();
                }
                
            }

    2.再建一个测试类,在类前面一行加入监听@Listeners({ com.elong.air.tools.AlertListner.class }) ,测试类只需要写正常代码,不需要对可能会弹alert的弹框进行处理。

        @Test
        public void ff6() {
            System.out.println("jinru ff6test");
            System.setProperty(key, value);
            driver = new ChromeDriver();
            driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
            driver.findElement(By.xpath("//*[@id='alert']/input")).click();
            
            driver.findElement(By.xpath("//*[@id='alert']/input"));
        }

    最后这个方法还存在瑕疵,需要后续优化,欢迎读者提出改进意见。

    展开全文
  • selenium之alert弹框

    2018-08-01 15:17:00
    前言 在定位某些元素过程中,浏览器原生弹框会阻止页面元素的定位,此时我们需要对弹框进行处理,就需要应用到弹框的一些处理事件 ...如何处理alert弹框 alert弹框包含三种alert、confirm、prompt alert弹框只...

    前言

    在定位某些元素过程中,浏览器原生弹框会阻止页面元素的定位,此时我们需要对弹框进行处理,就需要应用到弹框的一些处理事件

    如何判定是原生弹框还是非原生,用F12弹框是否能定位到弹框中元素,如果定位不到说明是原生的弹框

    非原生弹框(html弹框)可以用正常定位元素的方法进行定位操作

    如何处理alert弹框

    alert弹框包含三种alert、confirm、prompt

    alert弹框只是点击确定就可以取消弹框

    confirm弹框可以点击确定和取消

    prompt弹框需要输入信息之后点击确定

    操作方法

    driver.switch_to.alert.accept()#点击确定
    driver.switch_to.alert.dismiss()#点击取消
    driver.switch_to.alert.send_keys()#输入信息
    driver.switch_to.alert.text#获取弹框中文本

     

    转载于:https://www.cnblogs.com/xiao-qing/p/9401425.html

    展开全文
  • 说到这里我们首先要先说下Alert是如何来的,一般是用来确认某些操作、输入简单的text或用户名、密码等,根据浏览器的不同,弹出框的样式也不一样,在firebug中是无法获取到该框的元素的,也就是说alert是不属于网页...
  • alert弹框DeprecationWarning

    千次阅读 2019-01-08 09:47:01
    selenium做UI自动化的时候经常会对alert弹框做一些确认和取消以及获取text文本。由于本人用的python编辑器是3.0版本以上的。driver.switch_to_alert()做弹框处理的时候会出现一些弃用的提示信息。但这个方法可以用。...
  • alert 实际上也是Selenium的一个模块,要使用该模块首先得引入from selenium.webdriver.common.alert import Alert 点击确认按钮:driver.switch_to.alert.... 如果alert弹框上有文本框,可以输入文字driver.switch...
  • 版权声明:本文为CSDN博主「药药君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文...alert弹窗处理一般有两种: 第一种,点确认使用 .accept() 函数 第二种,点取消或是点右上角的x,使用 .dismiss()...
  • selenium的弹框处理

    2021-05-13 19:34:49
    处理弹框的主要方法和属性如下所示: 使用的html页面如下所示:与下面代码属于同一目录 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>title</title> <...
  • 弹框处理 1.webdriver中处理JavaScript所生产的alert、confirm以及prompt是很简单的。 2.switch_to.alert方法定位到alert/confirm/prompt。然后用text/accept/dismiss/send_keys按需进行操作 (1)text: 返回 ...
  • webdriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。具体思路是使用 switch_to.alert()方法定位到 alert/confirm/prompt。然后使用 text/accept/dismiss/send_keys 按需进行操做。 先来...
  • 最近在做移动端的项目,需要制作移动端的alert弹框和message-box提示信息;之前使用Vue框架的element-ui时,就记得element-ui的弹框,今天深入的研究了一下源码,然后简单制作了一点小demo 用到的知识点 Vue组件的...
  • python+selenium之执行js脚本触发一个alert弹出框以及关闭alert弹框 https://blog.csdn.net/huang_shanshan/article/details/90603149?depth_1-utm_source=distribute.pc_relevant.no...
  • selenium 自动化之五----弹框处理

    千次阅读 2019-05-09 15:05:01
    本章节针对测试过程中,我们在实际操作中会...在webdriver中处理js生成的alert confirm,使用switch_to_alert()方法定位,然后使用text/accept/dismiss/send_keys方法进行操作 <!DOCTYPE html> <html> ...
  • alert弹窗处理一般有两种: 第一种,点确认使用 .accept() 函数 第二种,点取消或是点右上角的x,使用 .dismiss() 函数 延用上一篇的代码,在百度设置点保存设置后,会弹出一个框,然后对弹框进行点击确认 或是 ...
  • alert 实际上也是Selenium的一个模块,要使用该模块首先得引入 from selenium.webdriver....如果alert弹框上有文本框,可以输入文字 driver.switch_to.alert.sendkeys() 返回alert上的文本内容 text = driver.switch
  • 上一篇博客介绍了Web自动化中的窗口切换处理(句柄切换),可以通过句柄切换至一个标签页。那么我们今天一起来学习一下,怎么切换alert弹窗。alert弹窗是最简单的一种切换。 1、什么是alert弹窗? 1、alert方法有一...
  • alert 弹出框的操作

    2021-03-07 00:05:13
    1.Alert对象:是Selenium WebDriver中专门处理弹出框的一种对象,这种对象我们不需要导入它,也不需要实例化,只需要调用切换对象的alert属性就可以获得该对象实例。 2.切换到弹出框语法:变量=driver.switch_to....
  • web自动化弹框处理

    2021-07-01 10:22:41
    time.sleep(3) #等待alert弹出框可见 WebDriverWait(driver,20).until(EC.alert_is_present()) #从html页面切换到alert弹框 alert = driver.switch_to.alert #获取alert的文本内容 print(alert.text) #接受--选择...
  • 禁止UIWebView弹出alert对话框 方式是新建UIWebView的分类,然后重写三个方法,方法实现都为空,runJavaScriptConfirmPanelWithMessage返回YES. #import " UIWebView+HJ.h " @implementation UIWebView (HJ...
  • 不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert。先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决。 alert\confirm\prompt弹出框操作主要方法有: text:获取文本值 ...
  • 使用Vue与d3.js制作的一款弹框插件 演示地址 使用与安装 //安装 npm install //运行 npm run build 使用到的工具 gulp rollup vue d3 jsdoc sass 目录结构 实现思路 使用d3.js和vue.js做好控件后在公共...
  • python+selenium 处理alert弹出框

    千次阅读 2020-12-07 15:51:56
    在做自动化测试时,对于alert类型的弹出框如果不做处理,就无法对页面进行定位等下一步操作,那么alert类型的弹出框有哪些呢?相应的弹出框应该如何做处理呢?下面将一一介绍 提示:以下是本篇文章正文内容,下面...
  • Selenium alert 弹窗处理

    2020-08-06 10:58:44
    页面弹窗有 3 种类型: alert(警告信息) confirm(确认信息) prompt(提示输入) 对于页面出现的 alert ...对应处理方式: alert(警告信息):WebDriver.switch_to.alert.accept() confirm(确认信息): We

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,286
精华内容 2,114
关键字:

alert弹框处理