【slenium专题】Webdriver同步设置

本文详细介绍了Webdriver中用于处理页面加载和元素定位的各种等待策略,包括隐形等待、显性等待、线程休眠及Wait接口的使用方法,并提供了具体的代码示例。

Webdriver同步设置常用等待类主要如下图所示

 

注:support.ui包内类主要实现显性等待功能,timeouts()内方法主要实现隐性等待功能

一.线程休眠 

Thread.sleep(long millis)

 

二.隐形等待

 隐性等待:设置一次,driver整个生命周期中都在使用,不需要针对元素明确设置

driver.manage().timeouts().implicitlyWait(long outTime, TimeUnit unit);

全局设置,设置driver执行所有定位元素操作的超时时间

Parameters:outTime– 超时等待时间;unit– 时间单位.

Ex. 

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//超时等待时间为10S

 

 

 

三.显性等待

 

    显性等待:需要等待的元素定位时需要逐一明确调用该等待方法

Figure 1 Support.ui包常用类UML

 

[常用等待模板]

  1. 等待元素加载

    1)WebDriverWait

new WebDriverWait(WebDriver driver, long timeOutInSeconds).until(ExpectedConditions.presenceOfElementLocated(By by))

注解

  • Parametersdriver-webdriver; timeOutInSeconds-超时等待时间(s; by-元素locator
  • timeOutInSeconds范围内,等待满足until()方法中的条件,即刻跳出等待。
  • 超出timeOutInSeconds抛出异常.

     2)FluentWait 

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)

             .withTimeout(long timeOut, TimeUnit unit)

             .pollingEvery(long duration, TimeUnit unit)

             .ignoring(exceptionType);

wait.until(ExpectedConditions.presenceOfElementLocated(By.by));

注解

  • Parametersdriver-webdriver;timeOut -超时等待时间(s;unit-时间单位; by-元素locator;

    duration-查找元素时间间隔 ;exceptionType-忽略异常类型,例如 默认NoSuchElementException.class

  • timeOut范围内,driver每隔dration定位一次元素,若遇到exceptionType则继续等待,直到满足until()方法中的条件,即刻跳出等待。
  • 超出timeOutInSeconds未满足until条件抛出异常.

   2.等待并获取元素—仅需要修改until方法体

 

WebElement element = wait.until(
  new ExpectedCondition<WebElement>(){
    @Override
    public WebElement apply( WebDriver driver) {
        return driver.findElement( By by);
    }
  }
);

注解

  • Parametersdriver-webdriverWebDriverWait|FluentWait实例化方法中获取; by-元素locator
  • Return:若定位到元素,返回webelement;否则报异常

[案例]

  1. 等待页面元素加载
    • WebDriverWait
Wait<WebDriver> wait = new WebDriverWait(driver,10);

wait.until(
    ExpectedConditions. presenceOfElementLocated(By.id("myDynamicElement"))
);

方法功能:定位id=' myDynamicElement'的元素,超时等待时间为10S

    • FluentWait
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)

             .withTimeout(60, TimeUnit.SECONDS)

             .pollingEvery(10, TimeUnit.SECONDS)

             .ignoring(NoSuchElementException.class);

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

方法功能:定位id=' myDynamicElement'的元素,超时等待时间为60S,每隔10S定位一次,遇到NoSuchElementException报错忽略,继续等待直到超过60s

  1. 等待并获取页面元素
    • WebDriverWait
Wait<WebDriver> wait = new WebDriverWait(driver, 10);

WebElement e = wait.until(
    new ExpectedCondition< WebElement>(){

        @Override
        public WebElement apply( WebDriver d) {
            return d.findElement( By.id( " myDynamicElement " ));
        }
    }
);    

方法功能:定位id=' myDynamicElement'的元素,超时等待时间为10S,若定位到元素,直接返回元素

    •  FluentWait
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
             .withTimeout(60, TimeUnit.SECONDS)
             .pollingEvery(10, TimeUnit.SECONDS)
             .ignoring(NoSuchElementException.class);
 
WebElement element= wait.until(
        new ExpectedCondition<WebElement>() {
            @Override
            public WebElement apply( WebDriver d) {
                return d.findElement( By.id( " myDynamicElement " ));
            }
        }
);

方法功能:定位id=' myDynamicElement'的元素,超时等待时间为60S,每隔10S定位一次,60s内遇到NoSuchElementException报错忽略,继续等待;若定位到元素,直接返回该页面元素。

 

如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.

四.Wait

FluentWait类是Wait接口的实现,直接使用wait接口可以更灵活的完成您需要的等待功能,例如

Wait w = new Wait(){

    @Override

    public boolean until() {

    return webElement.isDisplayed();

    }
};    

这种等待的方式,据说在加载js代码的时候做判断会比较方便,目前没有调试成功。

 五、其他

1.等待页面加载

driver.manage().timeouts().pageLoadTimeout(100, SECONDS);

注解:

  • pageloadTimeout方法只适用于firefox浏览器,Chrome等其他浏览器并不适用,但我们可以自己实现一个定时器
  • 该方法设置页面加载超时时间为100s

 

2.等待异步脚本加载

 

driver.manage().timeouts().setScriptTimeout(100,SECONDS);

尚未调试通过

转载于:https://www.cnblogs.com/sylvia-liu/p/4607050.html

<think>好的,用户正在寻找软件测试相关的专栏、教程和资料。首先,我需要参考用户提供的引用内容,特别是引用[1]和引用[2],这些资料看起来非常全面,覆盖了软件测试的多个方面,比如接口测试、自动化测试、性能测试等。用户可能对基础知识、工具使用以及实战项目感兴趣。 接下来,我应该整理用户提到的资料内容,分门别类地列出不同的学习模块,这样用户可以根据自己的需求选择适合的部分。例如,基础知识、Linux和Shell是测试工程师的基本功,而自动化测试和持续集成则是进阶内容。同时,用户提供的资料还包括了面试宝典和视频教程,这对求职者来说非常有帮助。 另外,用户可能不知道如何系统学习,所以需要建议一个学习路径,从基础到高级逐步深入。还要考虑到工具的使用,比如Postman、JMeter等,这些都是实际工作中常用的工具,需要推荐相关的资源和实践方法。 还要注意引用用户提供的两个资料链接,确保在回答中正确标注引用标识。用户可能需要具体的网站或资源链接,但由于引用中未提供具体网址,可能需要建议他们通过提供的宝典文档和收藏的网站清单来获取更多信息。 最后,生成的相关问题需要围绕软件测试的不同方面,比如学习路径、工具选择、面试准备、实战项目等,帮助用户进一步探索相关内容。</think>### 软件测试学习路径与资源推荐 #### 一、核心学习模块与资料 根据引用内容,软件测试的核心知识体系可分为以下模块: 1. **基础知识** - 软件测试生命周期(需求分析→测试计划→用例设计→执行→缺陷管理→报告)[^1] - 黑盒/白盒测试方法、等价类划分、边界值分析等基础理论 2. **Linux与Shell** - 文件操作命令:`grep`, `awk`, `sed` - 环境部署与日志分析实践 ```shell # 示例:查找错误日志 grep "ERROR" /var/log/app.log | awk '{print $1, $4}' ``` 3. **接口测试工具链** | 工具类型 | 常用工具 | 学习重点 | |----------------|--------------------------|---------------------------| | 接口测试 | Postman, JMeter | 请求构造、断言验证 | | 抓包分析 | Wireshark, Fiddler | HTTP协议解析、数据篡改 | | 自动化框架 | Python+Requests/Pytest | 数据驱动、持续集成对接 | 4. **自动化测试进阶** - Web自动化:Selenium定位策略与PageObject模式 ```python from selenium.webdriver.common.by import By class LoginPage: username = (By.ID, "user") password = (By.XPATH, '//input[@class="pwd"]') ``` - APP自动化:Appium多设备并行测试 #### 二、推荐学习资源 1. **文档资料** - 《软件测试工程师面试宝典》(216页系统知识库)[^1] - 《Jenkins持续集成实战指南》(含性能测试方案设计) 2. **视频教程** - 接口测试工具专题(Postman高级用法+JMeter分布式压测) - Python测试开发课程(自动化框架搭建实战) 3. **实战项目** - 电商系统测试:包含支付流程、库存同步等复杂场景验证 - 微服务API测试:使用Swagger生成测试用例 #### 三、学习路径建议 ```mermaid graph TD A[基础理论] --> B[Linux/Shell] B --> C[数据库验证] C --> D[接口测试] D --> E[Web/APP自动化] E --> F[性能测试] F --> G[安全测试] ``` #### 四、工具资源网站 1. 测试工具下载:https://www.testingtools.org 2. OWASP安全测试指南:https://owasp.org 3. 测试案例库:https://www.testcasebank.com(含1000+真实业务场景)[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值