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

By admin in 4858.com on 2019年4月5日

*#后面发的 driver.switch_to_alert()
那句即使能够运营通过,不过会弹出警告音讯(这种写法3.x不建议使用)*

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

(一) 前言

开发职员使用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打开火狐,登录一遍天涯论坛(勾选自动登录),示例代码就能够运转了。

 4858.com 1

 

(1) 前言 开发人士使用JavaScript
警告或然模态对话框来唤醒校验错误音信、报告警方…

alert 命令弹出八个提醒框

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

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

为便利对 JavaScript 有三个直观的认识,本节会提供多少个简易的实例供
JavaScript 入门上学之用。上边包车型大巴代码是1个弹出提示框的事例:

行使WebDriver蒙受的那么些坑

 

4858.com 2

在做web项指标自动化端到端测试时首要运用的是Selenium
WebDriver来驱动浏览器。Selenium
WebDriver的帮助和益处是永葆的言语多,帮助的浏览器多。主流的浏览器Chrome、Firefox、IE等都帮忙,手提式有线电话机上的浏览器Android、三星手提式有线电话机等也支撑,甚至还协助PhantomJS(由于PhantomJS跑测试时并不需求渲染成分,所以实行进程快)。

而是自身在应用Selenium
WebDriver时,蒙受了过多坑。这么些题材,有的是因为Selenium
WebDriver与浏览器不一样版本之间包容性的题材,有的是Selenium
WebDriver自身的bug,当然也不乏友好对Selenium
WebDriver少数职能精通不透彻。小编花时间总结了弹指间,分享给我们,希望咱们今后碰到难题得以避过那些坑,少走弯路。此外也总括了有个别运用WebDriver的可比好的履行,也1并分享给我们。

  • WebDriver每一遍运营贰个Firefox的实例时,会变动1个匿名的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文件夹中,那样即就是接纳贰个簇新的profile也得以选用此plugin。

  • 使用WebDriver点击界面上Button成分时,若是当前Button成分被界面上别样因素遮住了,或没出未来界面中(比如Button在页面头部,可是显示屏只可以显示页面上半部分),使用暗中认可的WebElement.Click()大概会接触不了Click事件。

校正方案是找到该页面元素后直接发送一条Click的JavaScript指令。

1
((JavascriptExecutor)webDriver).executeScript("arguments[0].click();", webElement);
  • 当实行了部分操作发生页面跳转时,最棒加2个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操作,要求写三个Wait方法等待Ajax操作达成。方式与上一条中的基本相同。比如一个Ajax操作是用以向DropDownList中填充数据,则写一个方法判断该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成功等1体系措施来判定ajax是不是执行到位。

  • 1旦网址使用了JQuery的动画片效果,大家在运维测试的时候实在能够disable
    JQuery的animation,一方面能够加速测试的速度,另1方面能够加强测试的安居(假诺启用了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,就能够升官到当前的本子。

四、获得文本框里的文字

4858.com, 

  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
来查阅运营时的多寡,那么大家得以用上边包车型地铁秘诀来关闭那些 alert:

 

  1. while(selenium.isAlertPresent()) {

  2.

  3.    selenium.getAlert();

  4.

  5. }

 

  8、怎么样测试壹些张冠李戴音信的体现?

 

  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类

将上边部分代码,用文件编辑器(如写字板或任何越来越高级的编辑器,如 EditPlus
等)保存为 alert.html(或 alert.htm)。双击 alert.html
运营它(实际是使用 IE 等浏览器打开这几个文件),会看出如下弹出提醒框:

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

4858.com 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补充表达(基于笔记柒)

方法

简单说明

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打开火狐,登录2回和讯(勾选自动登录),示例代码就足以运作了。

 4858.com 4

 

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有