Java Selenium封装--RemoteWebElement

  1 package com.liuke.selenium.driver;
  2
  3 import java.sql.SQLException;
  4 import java.util.List;
  5 import org.json.JSONException;
  6 import org.openqa.selenium.By;
  7 import org.openqa.selenium.Dimension;
  8 import org.openqa.selenium.JavascriptExecutor;
  9 import org.openqa.selenium.NoSuchElementException;
 10 import org.openqa.selenium.Point;
 11 import org.openqa.selenium.WebDriver;
 12 import org.openqa.selenium.WebElement;
 13 import org.openqa.selenium.interactions.internal.Coordinates;
 14 import org.openqa.selenium.remote.RemoteWebElement;
 15 import org.openqa.selenium.support.ui.Select;
 16
 17 public class JSWebElement {
 18     private RemoteWebElement we = null;
 19     private JavascriptExecutor jse = null;
 20
 21     public JSWebElement(){}
 22
 23     public JSWebElement(RemoteWebElement we){
 24         this.we = we;
 25     }
 26
 27     ///
 28     ///通过元素ID定位元素
 29     ///
 30     public JSWebElement findElementById(String using) {
 31         try {
 32             return new JSWebElement((RemoteWebElement)we.findElementById(using));
 33         }catch (NoSuchElementException e){
 34             return new JSWebElement();
 35         }
 36     }
 37
 38     ///
 39     ///通过元素CSS表达式定位元素
 40     ///
 41     public JSWebElement findElementByCssSelector(String using) {
 42         try {
 43             return new JSWebElement((RemoteWebElement)we.findElementByCssSelector(using));
 44         }catch (NoSuchElementException e){
 45             return new JSWebElement();
 46         }
 47     }
 48
 49     ///
 50     ///通过元素Xpath表达式定位元素
 51     ///
 52     public JSWebElement findElementByXPath(String using) {
 53         try {
 54             return new JSWebElement((RemoteWebElement)we.findElementByXPath(using));
 55         }catch (NoSuchElementException e){
 56             return new JSWebElement();
 57         }
 58     }
 59
 60     ///
 61     ///通过链接的文字定位元素
 62     ///
 63     public JSWebElement findElementByLinkText(String using) {
 64         try {
 65             return new JSWebElement((RemoteWebElement)we.findElementByLinkText(using));
 66         }catch (NoSuchElementException e){
 67             return new JSWebElement();
 68         }
 69     }
 70
 71     ///
 72     ///通过元素DOM表达式定位元素
 73     ///
 74     public JSWebElement findElementByDom(String using) {
 75         try {
 76             JavascriptExecutor js = this.getJSE();
 77             WebElement we = (WebElement)js.executeScript(String.format("return %s", using));
 78             return new JSWebElement((RemoteWebElement)we);
 79         }catch (NoSuchElementException e){
 80             return new JSWebElement();
 81         }
 82     }
 83
 84     ///
 85     ///判断元素是否存在
 86     ///
 87     public Boolean isExist(){
 88         if (we != null){
 89             return true;
 90         }else{
 91             return false;
 92         }
 93     }
 94
 95     ///
 96     ///获取元素的HTML内容
 97     ///
 98     public String getHtml(){
 99         return we.getAttribute("outerHTML");
100     }
101
102     ///
103     ///获取元素的文本内容
104     ///
105     public String getText(){
106         return we.getText();
107     }
108
109     ///
110     ///获取元素的value值
111     ///
112     public String getValue(){
113         return this.getAttribute("value");
114     }
115
116     ///
117     ///获取元素的特定属性值
118     ///
119     public String getAttribute(String name){
120         return we.getAttribute(name);
121     }
122
123     ///
124     ///向可输入元素发送内容,如:text、textarea、filefield等
125     ///
126     public void sendKeys(String string){
127         String old_bg = this.setBackground("yellow");
128         try {
129             Thread.sleep(800);
130         } catch (InterruptedException e) {
131             e.printStackTrace();
132         }
133         we.sendKeys(string);
134         this.setBackground(old_bg);
135     }
136
137     ///
138     ///判断元素是否可用
139     ///
140     public boolean isEnabled(){
141         return we.isEnabled();
142     }
143
144     ///
145     ///判断元素是否可见
146     ///
147     public boolean isVisible(){
148         return we.isDisplayed();
149     }
150
151     ///
152     ///清空可编辑元素的内容。不可编辑元素次操作会抛异常
153     ///
154     public void clear(){
155         we.clear();
156     }
157
158     ///
159     ///对元素进行点击操作
160     ///
161     public void click(){
162         we.click();
163     }
164
165     ///
166     ///检查元素的特定属性值
167     ///
168     public void checkAttr(String attribute, JSWebUtils utils) throws SQLException, JSONException
169     {
170         String [] attributes=attribute.split("=", 2);
171         String actual = this.we.getAttribute(attributes[0]);
172         if (actual == null){ actual = "null"; }
173         utils.checkPointBase(actual,attributes[1]);
174     }
175
176     ///
177     ///获取元素的CSS值
178     ///
179     public String getCssValue(String name)
180     {
181         return we.getCssValue(name);
182     }
183
184     ///
185     ///判断元素是否被选中
186     ///
187     public boolean isSelected()
188     {
189         return we.isSelected();
190     }
191
192     ///
193     ///可选元素进行选中操作;如:select
194     ///
195     public void select(String by, String value) throws Exception
196     {
197         if (we.getTagName().equals("select")){
198             Select select = new Select(we);
199             if (by.equals("index")){
200                 select.selectByIndex(Integer.parseInt(value));
201             }else if (by.equals("value")){
202                 select.selectByValue(value);
203             }else if (by.equals("text")){
204                 select.selectByVisibleText(value);
205             }
206         }else{
207             Exception e = new Exception("The element is not SELECT Object");
208             throw e;
209         }
210     }
211
212     ///
213     ///对可选中元素进行取消选择操作;如:SELECT in multiple type
214     ///
215     public void deSelect(String by, String...value) throws Exception
216     {
217         if (we.getTagName().equals("select")){
218             Select select = new Select(we);
219             if (by.equals("index")){
220                 select.deselectByIndex(Integer.parseInt(value[0]));
221             }else if (by.equals("value")){
222                 select.deselectByValue(value[0]);
223             }else if (by.equals("text")){
224                 select.deselectByVisibleText(value[0]);
225             }else if (by.equals("*")){
226                 select.deselectAll();
227             }
228         }else{
229             Exception e = new Exception("The element is not SELECT Object");
230             throw e;
231         }
232     }
233
234     ///
235     ///判断下拉框是否为多选
236     ///
237     public boolean isMultiple() throws Exception
238     {
239         if (we.getTagName().equals("select")){
240             Select select = new Select(we);
241             if (select.isMultiple()){
242                 return true;
243             }else{
244                 return false;
245             }
246         }else{
247             Exception e = new Exception("The element is not SELECT Object");
248             throw e;
249         }
250     }
251
252     ///
253     ///获取select的当前选中值
254     ///
255     public String getSelectedText() throws Exception
256     {
257         if (we.getTagName().equals("select")){
258             String text = "";
259             Select select = new Select(we);
260             List<WebElement> options = select.getAllSelectedOptions();
261             for (WebElement w : options){
262                 text += w.getText() + "\r\n";
263             }
264             return text;
265         }else{
266             Exception e = new Exception("The element is not SELECT Object");
267             throw e;
268         }
269     }
270
271     ///
272     ///判断指定项是否存在
273     ///
274     public boolean isInclude(String name) throws Exception
275     {
276         if (we.getTagName().equals("select")){
277             Select select = new Select(we);
278             List<WebElement> options = select.getOptions();
279             for (WebElement w : options){
280                 if (w.getText().equals(name)){
281                     return true;
282                 }
283             }
284             return false;
285         }else{
286             Exception e = new Exception("The element is not SELECT Object");
287             throw e;
288         }
289     }
290
291     ///
292     ///获取元素的tagname
293     ///
294     public String getTagName(){
295         return we.getTagName();
296     }
297
298     ///
299     ///获取元素的id
300     ///
301     public String getId(){
302         return we.getId();
303     }
304
305     ///
306     ///获取元素的绝对位置
307     ///
308     public Point getLocation(){
309         return we.getLocation();
310     }
311
312     ///
313     ///获取元素的出现在屏幕可见区时的位置
314     ///
315     public Point getLocationOnScreenOnceScrolledIntoView(){
316         return we.getLocationOnScreenOnceScrolledIntoView();
317     }
318
319     ///
320     ///获取元素的坐标
321     ///
322     public Coordinates getCoordinates(){
323         return we.getCoordinates();
324     }
325
326     ///
327     ///获取元素的大小
328     ///
329     public Dimension getSize(){
330         return we.getSize();
331     }
332
333     ///
334     ///提交元素所在form的内容
335     ///
336     public void submit()
337     {
338         we.submit();
339     }
340
341     ///
342     ///勾选radio、checkbox
343     ///
344     public void check(String...values) throws Exception
345     {
346         if (we.getTagName().equals("input")){
347             if (we.getAttribute("type").equals("radio")){
348                 WebDriver wd = we.getWrappedDriver();
349                 List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
350                 if (values[0].equals("index")){
351                     wl.get(Integer.parseInt(values[1])).click();
352                 }else if (values[0].equals("value")){
353                     for (WebElement w : wl){
354                         if (w.getAttribute("value").equals(values[1])){
355                             w.click();
356                             break;
357                         }
358                     }
359                 }
360             }else if (we.getAttribute("type").equals("checkbox")){
361                 if (!we.isSelected()){
362                     we.click();
363                 }
364             }else{
365                 Exception e = new Exception("The element is not Radio or CheckBox Object");
366                 throw e;
367             }
368         }else{
369             Exception e = new Exception("The element is not INPUT Object");
370             throw e;
371         }
372     }
373
374     ///
375     ///取消勾选checkbox
376     ///
377     public void unCheck() throws Exception
378     {
379         if (we.getTagName().equals("input") && we.getAttribute("type").equals("checkbox")){
380                 if (we.isSelected()){
381                     we.click();
382                 }
383         }else{
384             Exception e = new Exception("The element is not CheckBox Object");
385             throw e;
386         }
387     }
388
389     ///
390     ///checkbox、radio是否勾选
391     ///
392     public boolean isChecked(String...values) throws Exception
393     {
394         if (we.getTagName().equals("input")){
395             if (we.getAttribute("type").equals("radio")){
396                 WebDriver wd = we.getWrappedDriver();
397                 List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
398                 if (values[0].equals("index")){
399                     return wl.get(Integer.parseInt(values[1])).isSelected();
400                 }else if (values[0].equals("value")){
401                     for (WebElement w : wl){
402                         if (w.getAttribute("value").equals(values[1])){
403                             return w.isSelected();
404                         }
405                     }
406                 }
407                 return false;
408             }else if (we.getAttribute("type").equals("checkbox")){
409                 return we.isSelected();
410             }else{
411                 Exception e = new Exception("The element is not Radio or CheckBox Object");
412                 throw e;
413             }
414         }else{
415             Exception e = new Exception("The element is not INPUT Object");
416             throw e;
417         }
418     }
419
420     ///
421     ///把元素滚动到可视区
422     ///
423     public void scroll()
424     {
425         this.focus();
426     }
427
428     ///
429     ///高亮元素
430     ///
431     public void highLight() throws InterruptedException
432     {
433         this.focus();
434         JavascriptExecutor js = getJSE();
435         String old_style = we.getAttribute("style");
436         for (int i = 0; i < 3; i++) {
437             js.executeScript("arguments[0].setAttribute(‘style‘, arguments[1]);", this.we, "background-color: red; border: 2px solid red;" + old_style);
438             Thread.sleep(500);
439             js.executeScript("arguments[0].setAttribute(‘style‘, arguments[1]);", this.we, old_style);
440             Thread.sleep(500);
441         }
442     }
443
444     ///
445     ///触发元素的特定事件
446     ///
447     public void fireEvent(String event){
448         JavascriptExecutor js = getJSE();
449         js.executeScript(String.format("arguments[0].%s()", event), this.we);
450     }
451
452     ///
453     ///使元素获取焦点
454     ///
455     public void focus(){
456 //        this.we.sendKeys("");
457         JavascriptExecutor js = getJSE();
458         js.executeScript("arguments[0].focus();", this.we);
459     }
460
461     ///
462     ///对元素执行JavaScript操作;即执行元素的dom操作
463     ///
464     public void executeJS(String commands){
465         JavascriptExecutor js = getJSE();
466         String[] comandArr = commands.split(";");
467         commands = "";
468         for (String comand : comandArr){
469             if (!comand.trim().equals("")){
470                 commands += String.format("arguments[0].%s;", comand);
471             }
472         }
473         if (!commands.equals("")){
474             js.executeScript(commands, this.we);
475         }
476     }
477
478     ///
479     ///获取原始的RemoteWebElement对象
480     ///
481     public RemoteWebElement getNativeWebElement(){
482         return this.we;
483     }
484
485     private JavascriptExecutor getJSE(){
486         if (this.isExist()){
487             if (this.jse == null){
488                 WebDriver wd = we.getWrappedDriver();
489                 this.jse = (JavascriptExecutor) wd;
490             }
491         }
492         return jse;
493     }
494
495     private String setBackground(String color){
496         JavascriptExecutor js = getJSE();
497         String old_bg = we.getCssValue("background-color");
498         js.executeScript("arguments[0].style.background = arguments[1];", this.we, color);
499         return old_bg;
500     }
501
502 }
时间: 2024-12-29 13:14:26

Java Selenium封装--RemoteWebElement的相关文章

Java Selenium封装--RemoteWebDriver

1 package com.selenium.driver; 2 import java.io.File; 3 import java.io.IOException; 4 import java.net.URL; 5 import java.util.HashMap; 6 import java.util.Map; 7 import java.util.Set; 8 import java.util.regex.Matcher; 9 import java.util.regex.Pattern;

Java基础——封装、继承、多态

Java基础--封装.继承.多态 --小实例快速成长 抽象: 1.目的:将复杂的东西简单化,将繁乱的内容有序化. 2.过程:对相同.相似的东西合而为一,对不同的内容进行归门别类. 3.结果:类.接口. 封装: 1.目的:化零为整,将零散的内容进行归属,进行权限控制. 2.过程:将某对象的属性.方法(功能)统一到其名下,并分别设置.适当的权限进行控制管理. 3.结果:对象,接口. 继承: 1.求大同存小异:在一个系列内,大部分都有的内容,就划归父类:子类将父类的内容继承过来,可以有自身的一些发展和

七:Java之封装、抽象、多态和继承

本文章介绍了关于Java中的面向对象封装.抽象.继承.多态特点 Java面向对象主要有四大特性:封装.抽象.继承和多态. 一.封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sle

java selenium (五) 元素定位大全

页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 在自动化测试过程中, 测试程序通常的操作页面元素步骤 1. 找到Web的页面元素,并赋予到一个存储对象中 (WebElement) 2. 对存储页面元素的对象进行操作, 例如:点击链接,在输入框中输入字符等 3. 验证页面上的元素是否符合预期 通过这三个步骤, 我们可以完成一个页面元素的操作, 找

Java面向对象㈠ -- 封装

Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:private,默认,protected,public来实现.(这四个权限访问控制符的区别网上有很多,建议读者自行搜索学习,切记要亲自练习一下!)最明显的实现就是把类的成员变量私有(private),只能通过类的成员函数来进行访问,并且此时的成员函数公有(public).这就是著名的setter/getter

java+selenium环境搭建

这篇文章只是为了记录一下搭建环境,方便自己日后查看. 一.在eclipse中搭建maven 1.安装maven 将apache-maven-3.5.0解压到C盘根目录下 配置maven环境变   MAVEN_HOME : C:\apache-maven-3.3.9  MAVEN : %MAVEN_HOME%\bin  MAVEN_OPTS : -Xms256m -Xmx512m  在path最前面加上: %MAVEN%; 验证maven是否安装成功 Cmd->mvn -version 成功则出现

体验Java的封装性

1 package com.cnblogs.java; 2 //体验Java的封装性 3 /* 4 * 如下的人类年龄赋值-300岁,显然很不合理,这种直接对类的属性赋值,有时候虽然不合理但却会编译通过. 5 * 所以我们考虑不让对象直接操作属性,而是通过对象调用方法来对属性赋值,在方法中我们就可以进一步限制 6 * 赋值的大小问题. 7 * 解决办法:将类的属性私有化,通过共有的方法来调用修改类的属性.(在方法中限制修改的值) 8 */ 9 public class TestPerson {

JAVA中封装JSONUtils工具类及使用

在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. 封装后的JSON工具类JSONUtils.java代码如下: JSONUtils代码,点击展开 import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Itera

Java Selenium起步

先将录制的脚本导出来,转成java的格式 在Eclipse中编辑并运行test     2.1 新建一个Java project: File-New-Java Project     2.2 在上一步建好的项目名称上点鼠标右键, 点击Build Path-Add External Archives...,将下载的selenium-java-2.21.0.jar(client)和selenium-server-standalone-  2.21.0.jar(server)加进来 2.3 启动sel