威尼斯人线上娱乐

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

21 4月 , 2019  

*#前边发的 driver.switch_to_alert()
那句纵然能够运作通过,不过会弹出警告音讯(那种写法三.x不建议使用)*

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

(一) 前言

开荒人士使用JavaScript
警告可能模态对话框来提示校验错误音信、报告警察方音信、实行操作后的回到音信,乃至用来接收输入值等。

(二) Alert类

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

(三) Alert成效及措施

功能/属性

简单说明

text

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

alert.text

 

方法

简单说明

accept()

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

dismiss()

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

send_keys(value)

模拟给元素输入信息

 

(四) 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(如下图)

操作警告和弹出框,JavaScript基础教程之alert弹出提醒框实例。照旧百度  Python selenium profile

布置好后,选用自定义的profile展开火狐,登入三回和讯(勾选自动登录),示例代码就足以运作了。

 威尼斯人线上娱乐 1

 

(壹) 前言 开采人士使用JavaScript
警告或许模态对话框来唤醒校验错误新闻、报告警察方…

alert 命令弹出2个提醒框

  

* 改成 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的实例时,会转移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文件夹中,这样即便是选用1个全新的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操作,须求写3个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成功等一多级措施来决断ajax是或不是试行到位。

  • 只要网址选择了JQuery的动画效果,我们在运维测试的时候实在能够disable
    JQuery的animation,1方面可以加速测试的速度,另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在点选次警告框时会偶尔战败。具体原因还未调查。解决方案是拼命3郎不行使Alert方法的警告框,而是自身实现情势窗口(比方Jquery
    UI的形式窗口)来促成警告框效果。那样即确认保障了测试的扬眉吐气,此外大家和好能够垄断警告框的体制,给用户带来越来越好的体会。

  • 时不时更新Selenium的版本。注意平时上Selenium的官网看是不是宣布了新的版本,新的版本都修复了那多少个bug,假设含有你超越的bug,就能够升官到当前的版本。

四、获得文本框里的文字

 

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

 

  getValue 方法正是收获文本框里的数值,可不是 getText
方法,用错了可就郁闷了。

  五、决断页面是不是留存八个因素

 

  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
来查阅运营时的数量,那么我们得以用上面包车型大巴不二秘技来关闭那1个 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文书档案1个一个找,

(一) 前言

复制代码 代码如下:

开垦人士使用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
已经限制此网页运行能够访问Computer的脚本或 ActiveX
空间。”,那么请接纳“允许阻止的始末”,以允许IE浏览器运维方面包车型大巴 JavaScript
代码。

 

实例语法解释

方法

简单说明

accept()

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

dismiss()

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

send_keys(value)

模拟给元素输入信息

上边对地点例子的 JavaScript 语法做八个简短的分解:
<script type=”text/javascript”>代表 JavaScript
代码的上马,</script> 代表停止。JavaScript
代码要放在那些开头与截止之间。
alert(“作者是投石问路文字!”); 正是 JavaScript 代码,alert()
表示弹出一个提醒框(如上海体育场面所示),代码以英文的 ; 表示甘休。
弹出框的提示文字,以 “” 或 ” 引起来,并放入 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展开火狐,登入一回天涯论坛(勾选自动登6),示例代码就能够运维了。

 威尼斯人线上娱乐 4

 


相关文章

发表评论

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

网站地图xml地图