• Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法


    一、显式等待

    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     }
    只要路是对的,就不怕路远
  • 相关阅读:
    一种可以避免数据迁移的分库分表scale-out扩容方式
    ZooKeeper快速搭建
    ZooKeeper典型应用场景一览
    基于 Quartz 开发企业级任务调度应用
    mac安装dart环境配置及中途的错误解决
    Android Studio3.3打包报错AAPT2 process unexpectedly exit. Error output:
    android在App应用内打开word、xls、pdf等office文档(基于腾讯tbs)
    android分渠道打包,监测日活量统计(基于友盟SDK)
    PHP环境搭建-Windows系统下PHP环境搭建
    使用bugly热更新时自定义升级弹窗的UI样式
  • 原文地址:https://www.cnblogs.com/klmei/p/7065592.html
Copyright © 2020-2023  润新知