操作警告和弹出框,JavaScript基础教程之alert弹出提示框实例

*#事首发的 driver.switch_to_alert()
那句尽管能够运作通过,但是会弹出警告音讯(那种写法叁.x不提议使用)*

Python+Selenium笔记(9):操作警告和弹出框,pythonselenium

操作警告和弹出框,JavaScript基础教程之alert弹出提示框实例。(一) 前言

开辟人员使用JavaScript
警告恐怕模态对话框来唤醒校验错误消息、报告警察方音信、施行操作后的回来新闻,以致用来抽出输入值等。

(二) Alert类

Selenium WebDriver 通过Alert 类来操控 JavaScript 警告。

(三) Alert成效及艺术

功能/属性

简单说明

text

获取弹出窗口的提示信息(文本内容)

alert.text

 

方法

简单说明

accept()

接受JS警告信息,单击确定

dismiss()

接受JS警告信息,单击取消

send_keys(value)

模拟给元素输入信息

 

(四) 美高梅开户网址 ,Webdriver API补充表达(基于笔记7)

方法

简单说明

switch_to_active_element()

返回当前焦点的对象

switch_to_alert()

把焦点切换至当前页面弹出的警告

switch_to_default_content()

切换焦点至默认框架内

switch_to_frame()

通过索引、名称和网页元素,将焦点切换至指定的框架

switch_to_window()

切换焦点到指定的窗口

 

(五) 以身作则(检查天涯论坛首页点击退出是不是弹出提示)

 1 import unittest
 2 from  selenium import webdriver
 3 class SignOut(unittest.TestCase):
 4 
 5     @classmethod
 6     def setUpClass(cls):
 7         #获取自定义的 profile路径
 8         cls.profile = webdriver.FirefoxProfile\
 9             (r'C:\Users\quanhua\AppData\Roaming\Mozilla\Firefox\Profiles\tnwjkr4m.selenium')
10         #创建火狐浏览器驱动实例,启动时加载自定义的profile
11         cls.driver = webdriver.Firefox(cls.profile)
12         cls.driver.implicitly_wait(20)
13         cls.driver.maximize_window()
14         cls.driver.get('https://www.cnblogs.com/')
15     def test_sign_out(self):
16         driver = self.driver
17         #定位博客园首页的 退出
18         span_userinfo = driver.find_element_by_css_selector('#span_userinfo')
19         sign_out_btn = span_userinfo.find_element_by_link_text('退出')
20         sign_out_btn.click()
21         #将焦点切换到当前页面弹出的警告,并获取弹出框的text
22         alert = driver.switch_to_alert()
23         alert_text = alert.text
24         #检查点击退出时,是否弹出提示信息  确认退出吗?
25         self.assertTrue(alert_text == '确认退出吗?')
26         alert.accept() #点击确定
27 
28     @classmethod
29     def tearDownClass(cls):
30         cls.driver.quit()

 

(六) 应用示例代码须要布署火狐的profile(如下图)

也许百度  Python selenium profile

布局好后,选拔自定义的profile张开火狐,登陆拾1遍天涯论坛(勾选自动登陆),示例代码就足以运作了。

 美高梅开户网址 1

 

(一) 前言 开荒职员使用JavaScript
警告或许模态对话框来提示校验错误新闻、报告警察方…

alert 命令弹出二个提示框

  

* 改成 driver.switch_to.alert就不会了。*

为方便对 JavaScript 有八个直观的认知,本节会提供多少个简易的实例供
JavaScript 入门上学之用。下边包车型客车代码是二个弹出提示框的事例:

利用WebDriver遭逢的那多少个坑

 

美高梅开户网址 2

在做web项目标自动化端到端测试时入眼使用的是Selenium
WebDriver来驱动浏览器。Selenium
WebDriver的助益是永葆的言语多,支持的浏览器多。主流的浏览器Chrome、Firefox、IE等都帮助,手提式有线电话机上的浏览器Android、三星手提式有线电话机等也协理,以致还协助PhantomJS(由于PhantomJS跑测试时并不必要渲染成分,所以进行进程快)。

而是本身在行使Selenium
WebDriver时,境遇了累累坑。那一个主题材料,有的是因为Selenium
WebDriver与浏览器分化版本之间兼容性的主题素材,有的是Selenium
WebDriver自家的bug,当然也不乏友好对Selenium
WebDriver或多或少职能驾驭不深透。作者花时间总结了一晃,分享给我们,希望大家随后遭受标题能够避过这么些坑,少走弯路。此外也计算了某个施用WebDriver的相比较好的试行,也一只分享给我们。

  • WebDriver每便运转三个Firefox的实例时,会变动三个无名氏的profile,并不会接纳当前Firefox的profile。这一点一定要留心。举个例子若是访问被测试的web服务必要通过代理,你想一贯设置Firefox的代办是无用的,因为WebDriver运维的Firefox实例并不会选择你那一个profile,准确的做法是透过FirefoxProfile来安装。
1
2
3
4
5
6
7
8
9
10
11
public WebDriver create() {
  FirefoxProfile firefoxProfile = new FirefoxProfile();
  firefoxProfile.setPreference("network.proxy.type",1);
  firefoxProfile.setPreference("network.proxy.http",yourProxy);
  firefoxProfile.setPreference("network.proxy.http_port",yourPort);
  firefoxProfile.setPreference("network.proxy.no_proxies_on","");
  return new FirefoxDriver(firefoxProfile);
}

通过FirefoProfile也足以安装Firefox另外各个配置。要是要暗中认可给Firefox安装插件的话,可以将插件放置到Firefox安装目录下的暗许的plugin文件夹中,那样固然是采取3个簇新的profile也能够行使此plugin。

  • 利用WebDriver点击分界面上Button成分时,假若当前Button成分被分界面上任何因素遮住了,或没现身在分界面中(比方Button在页面尾巴部分,但是显示屏只好展现页面上半有的),使用私下认可的WebElement.Click()大概会接触不了Click事件。

校订方案是找到该页面成分后一贯发送一条Click的JavaScript指令。

1
((JavascriptExecutor)webDriver).executeScript("arguments[0].click();", webElement);
  • 当实行了一部分操作产生页面跳转时,最棒加贰个Wait方法等待page
    load实现再打开继续操作。方法是在有些时刻段内决断document.readyState是或不是complete。
1
2
3
4
5
6
7
8
9
10
11
12
13
    protected Function<WebDriver, Boolean> isPageLoaded() {
        return new Function<WebDriver, Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
            }
        };
    }
    public void waitForPageLoad() {
        WebDriverWait wait = new WebDriverWait(webDriver, 30);
        wait.until(isPageLoaded());
    }
  • 举例页面有Ajax操作,须求写1个Wait方法等待Ajax操作达成。情势与上一条中的基本一样。比方1个Ajax操作是用来向DropDownList中填充数据,则写2个主意判定该DropDownList桐月素是不是多余0个。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    private Function<WebDriver, Boolean> haveMoreThanOneOption(final By element) {
        return new Function<WebDriver, Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                WebElement webElement = driver.findElement(element);
                if (webElement == null) {
                    return false;
                } else {
                    int size = webElement.findElements(By.tagName("option")).size();
                    return size >= 1;
                }
            }
        };
    }
    public void waitForDropDownListLoaded() {
        WebDriverWait wait = new WebDriverWait(webDriver, 30);
        wait.until(isPageLoaded());
    }

就那样类推,大家得以断定有个别成分是或不是呈现、有个别class是不是append成功等一层层措施来决断ajax是还是不是实践到位。

  • 要是网址选拔了JQuery的卡通效果,大家在运营测试的时候其实能够disable
    JQuery的animation,一方面能够加快速检查评定试的进程,另壹方面可以压实地度量试的安静(若是启用了Animation,使用WebDriver驱动浏览器时可能会并发有的不能够预料的格外)。
1
((JavascriptExecutor)driver).executeScript("jQuery.fx.off=true");
  • 是因为WebDriver要驱动浏览器,所以测试运维的时间比较长,大家得以相互跑测试以节省时间。假设您使用的是maven创设筑工程具,能够配备surefire
    plugin时,在configruation节点出席以下配置。
1
2
3
<parallel>classes</parallel>
<threadCount>3</threadCount>
<perCoreThreadCount>false</perCoreThreadCount>
  • 当测试fail的时候,要是当前利用的WebDriver完毕了TakesScreenshot接口,大家就足以调用相应的方式截下当前浏览器显示的web页面,那样便于快速稳固出错的原因。
1
2
3
4
5
6
    public void getScreenShot() {
        if (webDriver instanceof TakesScreenshot) {
            TakesScreenshot screenshotTaker = (TakesScreenshot) webDriver;
            File file = screenshotTaker.getScreenshotAs(savePath);
        }
    }
  • 设若页面弹出了浏览器自带的警告框(使用JavaScript的Alert方法),Selenium
    WebDriver在点选次警告框时会有时退步。具体原因还未侦查。化解方案是不择花招不应用Alert方法的警示框,而是自个儿完结情势窗口(举例Jquery
    UI的方式窗口)来促成警告框效果。那样即确定保证了测试的安澜,此外大家友好可以操纵警告框的体制,给用户带来更加好的体会。

  • 不时更新Selenium的版本。注意平日上Selenium的官网看是还是不是发布了新的本子,新的本子都修复了那多少个bug,要是带有你遇上的bug,就足以荣升到当下的本子。

4、获得文本框里的文字

 

  1. assertEquals(selenium.getValue("xpath=//input[@name=’WNO’]"), "1");

 

  getValue 方法便是得到文本框里的数值,可不是 getText
方法,用错了可就郁闷了。

  5、决断页面是不是留存二个成分

 

  1. assertTrue(selenium.isElementPresent("xpath=//input[@name=’MEICK_000′]"));

 

  一般那一个是用来测试当删除一些数码后,页面上有些东西就不会议及展览示的动静。

  陆、判别下拉框里甄选了哪位选项

 

  1. assertEquals(selenium.getSelectedIndex("xpath=//SELECT[@name=’HATIMING’]"), "1");

 

  那一个能够用来判别下拉框呈现的取舍是或不是是期望的选项。

  七、假使有 alert 弹出对话框怎么办?

  这一个难题弄了挺长期,能够如此来关闭弹出的对跨框:

 

  1. if(selenium.isAlertPresent()) {

  2.

  3.    selenium.getAlert();

  4.

  5. }

 

  其实当调用 selenium.getAlert() 时,就会关闭 alert 弹出的对话框。

  也足以行使 System.out.println(selenium.getAlert())
来查阅对跨框展现的新闻。

  在测试的时候,有的人会议及展览示多数alert
来查阅运转时的数据,那么我们得以用上边包车型客车法子来关闭那2个 alert:

 

  1. while(selenium.isAlertPresent()) {

  2.

  3.    selenium.getAlert();

  4.

  5. }

 

  八、怎么着测试一些破绽百出消息的显得?

 

  1. assertTrue(selenium.getBodyText().indexOf("错误消息")>=0);

 

  切记: getBodyText 重回的时浏览器页面上的文字,不回包含html
代码的,要是要显得html 代码,用上边那几个:

 

  1. System.out.println(selenium.getHtmlSource());

 

  以上就是最常用的多少个方法了,比方 click, type, getValue 等等。

  还有就是任其自然要学习 xpath, 其实xpath 也得以有“与、或、非”的操作:

 

  1. selenium.check("xpath=//input[(@name=’KNYKBN’)and(@value=’Y’)]");

 

  四、其他

  selenium
还有更加多的用法,比如弹出页面等等。当面对没见过的测试须求时,作者最笨的法子正是依照api文书档案一个叁个找,

(一) 前言

复制代码 代码如下:

开辟职员使用JavaScript
警告或然模态对话框来唤起校验错误新闻、报告警察方音信、实施操作后的归来音信,乃至用来抽出输入值等。

<script type=”text/javascript”>
alert(“作者是唤醒文字!”);
</script>

(二) Alert类

将方面部分代码,用文件编辑器(如写字板或任何更加高档的编辑器,如 艾德itPlus
等)保存为 alert.html(或 alert.htm)。双击 alert.html
运营它(实际是利用 IE 等浏览器展开这么些文件),会看到如下弹出提醒框:

Selenium WebDriver 通过Alert 类来操控 JavaScript 警告。

美高梅开户网址 3

(三) Alert作用及艺术

提示

功能/属性

简单说明

text

获取弹出窗口的提示信息(文本内容)

alert.text

假设利用 IE 浏览器提醒:为了便利怜惜安全性,Internet Explorer
已经限制此网页运维可以访问计算机的本子或 ActiveX
空间。”,那么请选拔“允许阻止的剧情”,以允许IE浏览器运行方面包车型客车 JavaScript
代码。

 

实例语法解释

方法

简单说明

accept()

接受JS警告信息,单击确定

dismiss()

接受JS警告信息,单击取消

send_keys(value)

模拟给元素输入信息

上边对下边例子的 JavaScript 语法做一个轻松易行的讲授:
<script type=”text/javascript”>代表 JavaScript
代码的启幕,</script> 代表停止。JavaScript
代码要放在这几个伊始与停止之间。
alert(“笔者是提醒文字!”); 正是 JavaScript 代码,alert()
表示弹出1个提示框(如上海体育场合所示),代码以英文的 ; 表示甘休。
弹出框的唤起文字,以 “” 或 ” 引起来,并放入 alert() 中。

 

您也许感兴趣的篇章:

  • 修改js confirm alert
    提醒框文字的总结实例
  • JS落成alert中显示换行的情势
  • JavaScript中的alert()函数使用本领详解
  • 禁止iframe页面包车型大巴兼具js脚本如alert及弹出窗口等
  • 让JavaScript的Alert弹出框失效的艺术禁止弹出警告框
  • js重写alert控件(适合学习js的菜鸟朋友)
  • js的alert样式怎么着改造如背景颜色
  • 动用JavaScript落成alert的实例代码

(四) Webdriver API补充表明(基于笔记7)

方法

简单说明

switch_to_active_element()

返回当前焦点的对象

switch_to_alert()

把焦点切换至当前页面弹出的警告

switch_to_default_content()

切换焦点至默认框架内

switch_to_frame()

通过索引、名称和网页元素,将焦点切换至指定的框架

switch_to_window()

切换焦点到指定的窗口

 

(五) 示范(检查腾讯网首页点击退出是或不是弹出提醒)

 1 import unittest
 2 from  selenium import webdriver
 3 class SignOut(unittest.TestCase):
 4 
 5     @classmethod
 6     def setUpClass(cls):
 7         #获取自定义的 profile路径
 8         cls.profile = webdriver.FirefoxProfile\
 9             (r'C:\Users\quanhua\AppData\Roaming\Mozilla\Firefox\Profiles\tnwjkr4m.selenium')
10         #创建火狐浏览器驱动实例,启动时加载自定义的profile
11         cls.driver = webdriver.Firefox(cls.profile)
12         cls.driver.implicitly_wait(20)
13         cls.driver.maximize_window()
14         cls.driver.get('https://www.cnblogs.com/')
15     def test_sign_out(self):
16         driver = self.driver
17         #定位博客园首页的 退出
18         span_userinfo = driver.find_element_by_css_selector('#span_userinfo')
19         sign_out_btn = span_userinfo.find_element_by_link_text('退出')
20         sign_out_btn.click()
21         #将焦点切换到当前页面弹出的警告,并获取弹出框的text
22         alert = driver.switch_to_alert()
23         alert_text = alert.text
24         #检查点击退出时,是否弹出提示信息  确认退出吗?
25         self.assertTrue(alert_text == '确认退出吗?')
26         alert.accept() #点击确定
27 
28     @classmethod
29     def tearDownClass(cls):
30         cls.driver.quit()

 

(六) 接纳示例代码要求计划火狐的profile(如下图)

可能百度  Python selenium profile

布置好后,选取自定义的profile打开火狐,登六一次天涯论坛(勾选自动登陆),示例代码就足以运作了。

 美高梅开户网址 4

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图