java web 多语言_基于 Selenium WebDriver 实现多语言环境下自动化截图

到此,一个 Junit4 test case 就在 Eclipse 中建成 , 如代码清单 1.

清单 1. 将脚本导入 Eclipse

package com.example.casePackage;  import static org.junit.Assert.fail ;  import java.util.concurrent.TimeUnit;  import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.openqa.selenium.By;  import org.openqa.selenium.JavascriptExecutor;  import org.openqa.selenium.NoSuchElementException;  import org.openqa.selenium.WebDriver;  import org.openqa.selenium.WebElement;  import org.openqa.selenium.support.ui.Select;  import com.example.util.TVTUtility;  public class TestCase{         private WebDriver driver;         private String baseUrl;         /*          * This is the directory to save the screen captures, if you have finished a          * language executing, please change the directory to save another          * languages screen captures          */         public static final String DIRECTORY = "c:\\ScreenCapture\\jp\\";         // the pictures's format         public static final String FORMAT = ".gif";         private StringBuffer verificationErrors = new StringBuffer();         @Before         public void setUp() throws Exception {                 driver = TVTUtility.openPreferenceFirefox ("en");                 baseUrl = "https://9.115.46.97:16311";                 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS );                 driver.manage().window().maximize();                          }           @Test           public void testCase_01010010() throws Exception {                 System.out .println("case1 start");                 driver.get(baseUrl + "/ibm/console/logon.jsp");                 driver.findElement(By.id ("j_username")).clear();                 driver.findElement(By.id ("j_username")).sendKeys("admin");                 driver.findElement(By.id ("j_password")).clear();                 driver.findElement(By.id ("j_password")).sendKeys("password");                 driver.findElement(By.id ("other")).click();                 /*                  * judge whether the user has login in the system or not, if the user                 * has already login in, then click OK button to log-out                  * the pre-user,                 * if there were no user has login the system, just ignore this step                 */                 if (isElementPresent(By.name ("submit"))) {                 driver.findElement(By.name ("submit")).click();                  }                                driver.switchTo().frame("ISCNavigation");                 driver.findElement(By.id ("2-nav-tree-expandable-item")).click();                 driver.findElement(By.id ("3-nav-tree-expandable-item")).click();                 driver.findElement(By.id ("                nav-tree-item-com.ibm.license.mgmt.ui.reports.ManageReports.node"\                )).click();                Thread.sleep (1000);                 driver.switchTo().defaultContent();                 driver.switchTo().frame("ISCWork");                 driver.findElement(By.className ("btnm1")).click();                 driver.findElement(By.className ("pop5")).click();                 Thread.sleep (1000);                 driver.findElement(By.xpath("html/body/div[1]/table/tbody/tr/td/div/                table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr/td/form/span/                table/tbody/tr[3]/td/table[2]/tbody/tr/td/table/tbody/tr[3]/td/table/                tbody/tr[3]/td[1]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/                tr/td[4]/a/img")).click();                        Select m1= new Select(driver.findElement(By.id(TVTUtility.byDom(                driver,"document.getElementsByTagName('select')[0].id"))));                m1.selectByIndex(9);                // select the day               Select y1= new Select(driver.findElement(By.id(TVTUtility.byDom(               driver,"document.getElementsByTagName('select')[1].id"))));                y1.selectByValue("2013");                driver.findElement(By.linkText("9")).click();                                        driver.findElement(                By.xpath("html/body/div[3]/div/table/tbody/tr[3]/td/input[1]"\                )).click();               driver.findElement(By.xpath("html/body/div[1]/table/tbody/tr/td/\               div/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr/td/form/\               span/table/tbody/tr[3]/td/table[2]/tbody/tr/td/table/tbody/tr[3]/\               td/table/tbody/tr[5]/td/table/                tbody/tr/td[1]/input")).click();                Thread.sleep(1000);                TVTUtility.captureScreen(driver, DIRECTORY,\                    TVTUtility.getMethodName(),FORMAT);                System.out.println("case1 finished");                 }        @After        public void tearDown() throws Exception {                driver.quit();                String verificationErrorString = verificationErrors.toString();                if (!"".equals(verificationErrorString)) {                     fail(verificationErrorString);                }        }}

[size=1em]清单 1 是一个完整的 Case 脚本,每个脚本从 Selenium IDE 中导出来都会由三个方法组成,setup(),tearDown() 和 testXxx()。setup() 在 testXxx() 前执行,tearDown() 在 testXxx() 之后执行。setup() 主要是用来初始化一些通用参数,比如 WebDriver 的构建和某些参数的初始化工作,或者系统的登陆。tearDown() 主要是来关闭浏览器等后续动作 ,Case 的主体在 testXxx() 中完成。

[size=1em]由于每个 Case 的主要步骤都是在 testXxx() 方法中完成,而 setup() 和 tearDown() 方法是一些通用的步骤,所以在写脚本的时候,不用为每一个导出的脚本都新建一个 Java 类,只需要将脚本中的 testXxx() 方法拷贝到已经建好的类中,并重用 setup() 和 tearDown() 方法。这样就可以在一个类中添加多个 testXxx() 方法,每个方法对应一个 Case 脚本。

[size=1em]其中 testXxx() 方法命名最好是有规律和规范的,比如 testCase_01010010(), testCase_01010020()..., 这样在保存截图的时候就可以使用方法名或者方法名的一部分作为图片名,处理起来也比较简单。

[size=1em]在 testXxx() 方法中,有很多如 driver.findElement(By.id ("2-nav-tree-expandable-item")).click(); driver.findElement(By.xpath ("xxxxxxxxxxxxxxxxxxxxxxx")).click(); 的语句,这些语句就是用来查找页面元素的,在用 Selenium WebDriver 的时候,主要挑战就是查找元素,所以了解更多的 WebDriver API 才能更顺利的去实现 Case 的编写。前面已经讨论过,在 TVT 中,重复工作在于截图,所以接下来就要解决截图问题。Selenium WebDriver 已经提供了截图方法,我们只需在需要截图的代码位置,嵌入截图语句。以下方法是将截图功能封装在一个 TVTUtility 的工具类中,如代码清单 2.

清单 2. 截图方法

public static void captureScreen(WebDriver dr, String directory,String captureName,              String format)      File screenShotFile = ((TakesScreenshot) dr).getScreenshotAs(OutputType.FILE );       try {         FileUtils.copyFile (screenShotFile, new File(directory+ captureName + \          format));             } catch (IOException e) {           e.printStackTrace();             }           }

[size=1em]在需要截图的位置,嵌入 TVTUtility.captureScreen(driver, DIRECTORY, TVTUtility.getMethodName(),FORMAT) 语句,就能完成截图并保存到指定的位置。这里需要注意语句的执行速度一般比 Firefox 的响应速度快,所以有必要在截图之前显示等待一段时间以便页面的完全加载,如 Thread.sleep(1000), 具体的时间要看实际情况而定。

[size=1em]captureScreen() 方法中参数 driver 是一个 Selenium WebDriver 对象,DIRECTORY 是保存图片的位置,TVTUtility.getMethodName() 参数的作用是获取当前的方法名,前面我们讨论过,这个方法的命名最好是有规律和规范的,这样就可以截取其一部分来作为图片保存的名称,比如截取成 01010010,01010020...,FORMAT 参数为图片的格式,如 jpg,gif 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] Standards模式和Quirks模式有什么区别?

[html] Standards模式和Quirks模式有什么区别? 怪异盒模型:元素内容宽度width-margin2-border2-padding2?其实我建议这样说 标准盒模型:元素内容宽度width,元素实际宽度margin2border2padding2width 怪异盒模型:元素…

IP通信基础 4月28号

冗余拓扑: 环路带来的问题:广播风暴;帧的重复复制;交换机MAC地址表的不稳定。 STP相关概念: 桥ID;端口ID;根桥;非根桥;根端口;指定端口;阻塞端口&…

成功有感之给年轻人的10个忠告

1、努力工作要努力,随随便便过日子过四五年也是过,稍微努力的过四五年也是过,努力的过四五年也是过,何不努力好好的干。如果努力的过好毕业后的四五年,这对我们以后的人生非常有帮助。2、虚心学习多与比自己大的人(长辈…

[html] HTML与XHTML二者有不同

[html] HTML与XHTML二者有不同 XHTML 标签必须关闭XHTML所有标签必须小写XHTML标签必须正确嵌套个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

java 编译参数_java – 为什么要编译?代码似乎打破了类型参数的约束

在下面的测试中,TesterClass对其两个类型参数之间的关系设置了约束.方法func2()似乎打破了这个约束,我希望它会在某处导致类型编译错误(在func2的定义中,或者每当类与String之外的任何第二个参数一起使用时),但它不会!此外,如果我调用func2并将结果保存在适当类型的…

Javascript乱弹设计模式系列(1) - 观察者模式(Observer)

前言 博客园谈设计模式的文章很多,我也受益匪浅,包括TerryLee、吕震宇等等的.NET设计模式系列文章,强烈推荐。对于我,擅长于前台代码的开发,对于设计模式也有一定的了解,于是我想结合Javascript来设计前台方…

oracle中出现会话被锁

v$locked_object视图列出当前系统中哪些对象正被锁定 --查询被锁session_id select session_id from v$locked_object; -- SELECT sid, serial#, username, osuser FROM v$session where sid 396; --杀掉一个会话进程 ALTER SYSTEM KILL SESSION 396,17429; 转载于:https://ww…

[html] title与h1、b与strong、i与em的区别分别是什么?

[html] title与h1、b与strong、i与em的区别分别是什么? title标签写在body里面不会被渲染,只能写在head里面,对网站SEO比较重要h1标签写在body里面,但是写在head里(不推荐),渲染的时候会自动渲染到body里面去b标签与strong标签在表现上是一样的,都自带font-weight: …

【JS】JS中数值型字符串相加变成拼接字符串的解决方法

一、问题描述 数值型的字符串,通过、 运算符连接后,变成了字符串拼接,而不是数值计算。 先上图: 二、错误原因 这是由于JS中、 运算符既是算术运算符,也是字符串的连接符> 的运算规则是:如果把数字与字符…

[html] html5都有哪些新的特性?移除了哪些元素?

[html] html5都有哪些新的特性?移除了哪些元素? 新增特性canvassvgvideodrag & droplocalStorage/sessionStorage语义化标签: header/nav/section/article/footerinput 类型: date/datetime/email/range移除元素appletbigfontframe/frameset个人简介…

安卓JAVA调用lua_android中java与lua的相互调用

Android Studio Lua环境配置开发环境1. Android Studio 3.52. java sdk: 1.8.03.android sdk:28配置环境添加lua支持语法支持插件,打开android studio -> File -> Settings三方库选择参考文章:https://gameinstitute.qq.com/community/…

过年之-防飞车贼

1、飞车贼最喜欢在马路边和小巷子里下手。 2、当你在偏僻路段单独行走时,听到后面有靠近的车声,提高警惕,注意避让尾随跟踪、企图接近的摩托车。 3、对于可疑车辆、人员要提高警惕,特别是两个人的摩托车:飞车贼寻找目标…

[html]如何让元素固定在页面底部?有哪些比较好的实践?

[html]如何让元素固定在页面底部?有哪些比较好的实践? *{margin:0;padding:0; } body{height:2000px; } div{width:100%;height:30px;position: fixed;bottom:0;text-align:center;line-height:30px;background: #00CCCC; }个人简介 我是歌谣&#xff…

Windows 2008 R2阿里云安全基线检查

设置密码使用期限策略在管理工具打开本地安全策略,打开路径:安全设置\帐户策略\密码策略,将密码最长使用期限设置为30-180之间,建议值为90,将密码最短使用期限设置为1-14之间,建议值为7.风险账户检查存在可疑隐藏账号&…

用ajax(vb.net) 实现dropdownlist二级无刷新联动~!

说说vb.net ajaxpro 实现dropdownlist二级无刷新联动~&#xff01;Code<div class"div_RSL"> <asp:DropDownList ID"DropDownList1" runat"server" DataSourceID"proID" DataTextField"proName"AutoPostBack"…

[html] xml与html有什么区别?

[html] xml与html有什么区别&#xff1f; xml, 是必须有结束元素<br></br>, 它们是自定义 html, 允许单必合<br />, 它们是已经定义好的 好像头部声明不一样? 其它不记得了, 说实话, 没怎么用过xml个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端…

JAVA遍历文件中的字符串_Java遍历文件夹下所有文件并替换指定字符串

应用场景&#xff1a;比如有一个深层次的文件目录结构&#xff0c;如&#xff1a;javaAPI每个文件里面都有相同的内容&#xff0c;而我们要统一修改为其他内容。上千个文件如果一个个修改显得太不明智。import java.io.BufferedReader;import java.io.File;import java.io.File…

python -m pip install [package] --no-deps

python -m pip install [package] --no-deps 有些 packages 会依赖一些其它的 package&#xff0c;当我们离线安装 whl 的时候&#xff0c;就无法联网下载依赖包&#xff0c;所以我们需要 --no-deps 来去掉依赖包的安装&#xff0c;这样就能离线安装 whl 了 但是 如果 whl 有…

SQLserver被js注入的全库替换SQL

CodeDECLARE fieldtype sysnameSET fieldtypenvarchar--替换处理DECLARE hCForEach CURSOR GLOBALFOR--要替换的列的数据类型SELECT NUPDATE QUOTENAME(o.name)N set QUOTENAME(c.name)REPLACE(QUOTENAME(c.name),<script srchttp://cn.daxia123.cn/cn.js></script>…

[html] 页面中怎么嵌入Flash?有哪些方法?写出来

[html] 页面中怎么嵌入Flash&#xff1f;有哪些方法&#xff1f;写出来 <object width"550" height"400"><param name"movie" value"somefilename.swf"><embed src"somefilename.swf" width"550"…