我是靠谱客的博主 沉默小土豆,最近开发中收集的这篇文章主要介绍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() + "rn";
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 }

 

转载于:https://www.cnblogs.com/liu-ke/p/4300586.html

最后

以上就是沉默小土豆为你收集整理的Java Selenium封装--RemoteWebElement的全部内容,希望文章能够帮你解决Java Selenium封装--RemoteWebElement所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部