zoukankan      html  css  js  c++  java
  • Selenium webdriver Java 封装与重用

    目的

    1. 简化调用

    WebDriver对页面的操作,需要找到一个WebElement,然后再对其进行操作,比较繁琐:

    WebElement element =driver.findElement(By.name("q")); 
    element.sendKeys("Cheese!"); 

     我们可以考虑对这些基本的操作进行一个封装,简化操作。比如,封装代码:

    protected void sendKeys(By by, String value){ 
    driver.findElement(by).sendKeys(value); 
    } 

     那么,在测试用例可以这样调用:

    sendKeys(By.name("q"),”Cheese!”);

    2. 添加异常捕获或等待

    对于一些常用的操作,比如查找元素,我们可以在查找元素前面添加一个显性等待,然后再是查找元素。

    protected void findEle(By by){ 
    new WebDriverWait(driver,10).until(    ExpectedConditions.presenceOfElementLocated(by));
    return driver.findElement(by); 
    } 

    样例

    封装之后,我们可以把这些封装函数放到公共模块,方便调用。

    更普遍的方式是作为BasePage的方法,在POM方式中,其他所有Page都继承自 BasePage,这样所有的Page都可以直接调用这些方法。

    比如下面的简单的 BasePage :

    import java.util.List;  
    import java.util.NoSuchElementException;  
    import java.util.concurrent.TimeUnit;  
    import org.openqa.selenium.By;  
    import org.openqa.selenium.WebElement;  
    import org.openqa.selenium.remote.RemoteWebDriver;  
    import org.openqa.selenium.support.ui.WebDriverWait;  
      
    public class BasePage{  
       protected RemoteWebDriver driver;  
       protected WebDriverWait driverWait;  
       private int WAIT_ELEMENT_TO_LOAD=10;  
      
        protected boolean isWebElementExist(By selector) {   
           try {   
               driver.findElement(selector);  
               return true;   
           } catch(NoSuchElementException e) {   
               return false;   
           }   
        }  
          
        protected String getWebText(By by) {   
           try {   
           return driver.findElement(by).getText();  
           } catch (NoSuchElementException e) {   
               return "Text not existed!";   
           }   
        }  
          
        protected void clickElementContainingText(By by, String text){  
           List<WebElement>elementList = driver.findElements(by);  
           for(WebElement e:elementList){  
               if(e.getText().contains(text)){  
                   e.click();  
                   break;  
               }  
           }       
        }  
          
        protected String getLinkUrlContainingText(By by, String text){  
           List<WebElement>subscribeButton = driver.findElements(by);  
           String url = null;  
           for(WebElement e:subscribeButton){  
               if(e.getText().contains(text)){  
                   url =e.getAttribute("href");  
                   break;  
               }  
           }  
           return url;  
        }  
      
        protected void click(By by){  
           driver.findElement(by).click();  
           driver.manage().timeouts().implicitlyWait(WAIT_ELEMENT_TO_LOAD,TimeUnit.SECONDS);  
        }  
       
        protected String getLinkUrl(By by){  
           return driver.findElement(by).getAttribute("href");  
        }  
      
        protected void sendKeys(By by, String value){  
           driver.findElement(by).sendKeys(value);  
        }  
    }
  • 相关阅读:
    2020毕业设计选用4412开发板,实战教程,小成果不放过
    学习嵌入式有决心4412再送免费教程
    iTOP4412开发板can测试工具使用文档
    iTOP4412Ubuntu系统源码ubuntu没有声音的解决办法
    修身养性,为人处事100条
    用X++实现有规律分割的长字符串,分别提取(如逗号隔开)
    自定义Dialog中对数组的取值
    Common实现任何Form定位查询转到当前Form种过滤符合条件的数据区域
    用X++得到当前用户是否有某Security Key的权限级别,完整Job演示
    获取table中的系统字段信息
  • 原文地址:https://www.cnblogs.com/miniren/p/4638935.html
Copyright © 2011-2022 走看看