Java Selenium封装--RemoteWebElement
来源:互联网 发布:20式82毫米迫击炮数据 编辑:程序博客网 时间:2024/06/08 13:49
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, JSONException169 {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 ///可选元素进行选中操作;如:select194 ///195 public void select(String by, String value) throws Exception196 {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 type214 ///215 public void deSelect(String by, String...value) throws Exception216 {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 Exception238 {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 Exception256 {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 Exception275 {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 ///获取元素的tagname293 ///294 public String getTagName(){295 return we.getTagName();296 }297 298 ///299 ///获取元素的id300 ///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、checkbox343 ///344 public void check(String...values) throws Exception345 {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 ///取消勾选checkbox376 ///377 public void unCheck() throws Exception378 {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 Exception393 {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 InterruptedException432 {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 }
0 0
- Java Selenium封装--RemoteWebElement
- Java Selenium封装--RemoteWebElement
- Java Selenium封装--RemoteWebDriver
- Java Selenium封装--RemoteWebDriver
- selenium自动化-java-封装断言
- 封装selenium
- 基于selenium-java封装chrome、firefox、phantomjs实现爬虫
- selenium Webdriver 封装方法
- selenium封装WebDriver
- Selenium 封装与重用
- selenium二次封装
- Selenium常用函数封装
- selenium封装常用方法
- 封装selenium之二
- 封装selenium之三
- selenium之终极封装
- Selenium java
- selenium java
- 巧用loadrunner代理,录制手机APP脚本
- 进程间的五种通信方式介绍
- GitHub for windows 使用方法
- 【LoadRunner】OSGI性能测试实例
- Android APP测试的日志文件抓取
- Java Selenium封装--RemoteWebElement
- 如何把n个点n-1条边转换为1棵树
- Java Selenium封装--RemoteWebDriver
- Android 4.0.3 CTS 测试
- popen的用法及与system调用的区别
- linux实用的日志分析脚本
- jenkins 邮件配置
- 安装GeoIP数据库
- dmcms调取获取扩展字段值