博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法
阅读量:4554 次
发布时间:2019-06-08

本文共 3724 字,大约阅读时间需要 12 分钟。

一、显式等待

1、显式等待:

      就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.

2、代码:

      new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.xpath("")));     //元素的xpath路径

      注:这里的15是指要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.

3、如果想对加载JS的代码做出判断,可以用以下方法:

      Wait wait=new Wait() {

     //selenium自带

@Override

public boolean until() {

// TODO Auto-generated method stub

return webElement.isDisplayed();

}

}; 

二、隐式等待

1、隐式等待:

      相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。

      隐式等待使得WebDriver在查找一个Element或者Element数组时,如果一直查找不到,每隔一段特定的时间就会轮询一次DOM。

      注:默认设置超时时间为0,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

2、代码:

      driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);    //1指等待1秒   

三、线程休眠

      Thread.sleep(1000);    //1000指1000ms

四、实用的等待方法封装代码

 

1 public void waitForAllElementLoad(String type, String locator, int num,long timeout) { 2         try { 3             Thread.sleep(500);// 等待1秒,以便观察 4         } catch (InterruptedException e1) { 5             // TODO Auto-generated catch block 6             System.out.println(e1.getMessage()); 7         } 8         for (int second = 0;; second++) { 9             try {10                 if (second >= timeout) {11                     break;12                 }13                 if (isElementPresent(type, locator, num)) {14                     break;15                 }16                 Thread.sleep(500);17             } catch (InterruptedException e) {18 19             }20         }21     }

 

1 public boolean isElementPresent(String elementType,String expression,int num) { 2         if(elementType.equals("className")){ 3             //验证该元素是否在页面上显示 --isDisplayed() 4             try { if (getElementsBy(elementType,expression).get(num).isDisplayed()) { 5                 return true; 6             } else { 7                 return false; 8             } 9             } catch (Exception e) { 10                 return false; 11             }     12         }else{13             try { if (getElementBy(elementType,expression).isDisplayed()) {14                 return true;15             } else {16                 return false;17             }18             } catch (NoSuchElementException e) { 19                 return false; 20             }     21       }22     }
1 //定位UI元素 2     public WebElement getElementBy(String elementType,String expression){ 3         switch (elementType) { 4           case "xpath": 5                 WebElement xpathelement = driver.findElement(By.xpath(expression)); 6                 return  xpathelement; 7           case "id": 8                  WebElement idelement = driver.findElement(By.id(expression)); 9                  return  idelement;10           case "className":11                  WebElement classNameelement = driver.findElement(By.className(expression));12                  return  classNameelement;13           case "linktext": 14                  WebElement linktextelement = driver.findElement(By.linkText(expression));15                  return linktextelement;16           case "name":17                   WebElement nameelement = driver.findElement(By.name(expression));18                   return nameelement;19           case "partialLinkText":20                   WebElement partialLinkTextelement = driver.findElement(By.partialLinkText(expression));21                   return partialLinkTextelement;22           case "cssSelector":23                 WebElement cssSelectorelement = driver.findElement(By.cssSelector(expression));24                 return cssSelectorelement;25           default:             26                  WebElement element = driver.findElement(By.xpath(expression));27                  return element;28         29         }        30     }

转载于:https://www.cnblogs.com/klmei/p/7065592.html

你可能感兴趣的文章
Azure 网站、云服务和虚拟机比较
查看>>
Windows 10在2018四月更新中默认安装了OpenSSH客户端
查看>>
jQuery常用函数
查看>>
一个忙着找实习工作的大三在校生的真实感受!!!
查看>>
Linux 下的 scp
查看>>
理解同步,异步和延迟脚本
查看>>
MMS源码中异步处理简析
查看>>
XMind 6 如何画流程图
查看>>
final发布评价
查看>>
DLL远程注入与卸载
查看>>
Jmeter-ForEach控制器
查看>>
Checklist: 2019 05.01 ~ 06.30
查看>>
Android 对话框(Dialog)大全 建立你自己的对话框
查看>>
解决java compiler level does not match the version of the installed java project facet
查看>>
和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
查看>>
Binary XML file : Error inflating class com.esri.android.map.MapView
查看>>
grep,awk和sed
查看>>
面向对象第四单元总结
查看>>
windows强大的快捷键
查看>>
linux tomcat开机自启/nginx开机自启
查看>>