zoukankan      html  css  js  c++  java
  • [selenium webdriver Java]使用自定义条件同步测试

    Selenium WebDriver可以结合ExpectedCondition类来定义自己期望的条件

    创建一个新的ExpectedCondition接口,必须实现apply方法

    等待元素出现

     1 public void testWithImplicitWait(){
     2     System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
     3     WebDriver driver = new ChromeDriver();
     4     driver.get("http://map.baidu.com");
     5 
     6         //点击展开当前城市
     7         WebElement curCity = driver.findElement(By.id("curCity"));
     8     curCity.click();
     9 
    10         //设置等待时间10秒
    11     WebDriverWait wait = new WebDriverWait(driver,10);
    12     //创建一个新的ExpecctedCondition接口,就必须实现apply方法
    13     WebElement message = wait.until(
    14             new ExpectedCondition<WebElement>(){
    15                 public WebElement apply(WebDriver d){
    16                     return d.findElement(By.id("selCityHotCityId"));
    17                 }
    18             }
    19             );
    20 
    21         driver.quit();
    22     }    
    示例代码

    等待元素属性值改变

    基于某些事件的操作后,元素的属性值可能会改变。例如,一个不可输入的文本框变为可输入状态。自定义的等待可以在元素的属性上实现。

    在这个例子中,ExpectedCondition类将等待返回Boolean值

    1 (new WebDriverWait(driver, 10).util(new ExpectedCondition<Boolean>(){
    2     public Boolean apply(WebDriver d){
    3       return d.findElement(By.id("username")).
    4 getAttribute("readonly").contains("true");  
    5     }
    6 }));

    等待元素变为可见

    开发人员会隐藏或是在一系列操作后显示某元素。指定的元素一开始已经存在于DOM中,但是为隐藏状态,当用户经过指定的操作后变为可见。那么这样的自定义期望条件应该如下:

    1 (new WebDriverWait(driver, 10).util(new ExpectedCondition<Boolean>(){
    2     public Boolean apply(WebDriver d){
    3       return d.findElement(By.id("xxx")).isDisplayed();  
    4     }
    5 }));

     等待DOM事件

    自定义的等待可以通过执行一段javascript代码并检查返回值来完成

    1 (new WebDriverWait(driver,10)).until(new ExpectedCondition<Boolean>(){
    2 public Boolean apply(WebDriver d){
    3 JavascriptExecutor js = (JavascriptExecutor) d;
    4 return (Boolean)js.executeScript("return jQuery.active == 0");
    5 }
    6 });
  • 相关阅读:
    2018年3月20日java
    2018年3月19日Java
    浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。
    如果用css的border属性画一个三角形
    js事件(event)的运行原理
    如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */
    js创建对象的高级模式
    查看release的SHA1
    集成百度地图定位和导航功能时出现包冲突
    【十次方基础教程(后台)】MongoDB相关
  • 原文地址:https://www.cnblogs.com/missPersist/p/4204381.html
Copyright © 2011-2022 走看看