【slenium专题】Webdriver同步设置

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-webdriver从WebDriverWait|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);

尚未调试通过

时间: 2024-10-13 16:49:49

【slenium专题】Webdriver同步设置的相关文章

MySQL 5.5主从同步设置教程

先修改Master(10.1.123.197)的 my.cnf 配置 在 [mysqld] 中新增以下内容 log-bin=mysql-bin log-bin-index=mysql-bin.index server-id = 1 sync_binlog=1 binlog_format=mixed 然后指定要做同步的数据库,并忽略掉不需要做同步的数据库 binlog-do-db = testdb binlog-ignore-db = mysql binlog-ignore-db = perfor

Slenium 2 Webdriver Highlight Element

+ ? 1 2 3 4 5 6 7 8 9 10 11 12 13 def highlight_element(self, locator):     """docstring for highlight_element"""     self._info("start")     element = self._element_find(locator, True, True)     parent = element._p

vscode同步设置&扩展插件

首先安装同步插件 第二部进入你的github如图:  打开设置选项: 新建一个token: 如图:  记住这个token值 转到vscode 按shift+alt +u  在弹出窗里输入你的token,然后等下会生成syncSummary.txt文件在窗口中打开这样就算成功了. syncSummary.txt这个文件里有个gist值或者到用户设置文件中查看gist的值,这个值用来你再另一台电脑上来下载你的设置 下载你的设置方法为:打开vscode--按alt+shift+d  在弹出窗里输入你的

删除 Zune 同步设置和历史记录教程

如果您的PC正在给多部WP7手机同步数据,而不想保留上一部WP7手机的同步信息和设置,那就来看看这里推出的删除Zune同步设置和历史记录教程吧.通过该操作可以快速的删除Zune软件与WP7手机同步时的各种设置和历史记录等信息,为其他WP7手机同步操作提供一个纯净的环境. 删除Zune同步设置和历史记录的准备: 1.安装Zune软件的PC.2.数据线.3.需要删除同步设置和历史记录的WP7手机. 操作步骤如下: 1.用数据线连接WP7手机和PC,电脑自动运行Zune软件,稍等片刻,让Zune进入同

vscode 同步设置及扩展插件 实现设备上设置统一

准备工作:电脑上需安装vscdoe,拥有github账户 1. 安装 同步插件"Settings Sync" 2. 进入github -> Settings 在左侧 Developer settings -> Personal access tokens 3. 点击按钮 Generate new token 新增一个token 图1: 图2: 图3: 记住你自己生成的token值 4. 回到vscode配置将token配置到本地 按shift + alt + u 在弹窗里输

vscode同步设置&amp;扩展插件

首先安装同步插件: Settings Sync 第二部进入你的github如图:  打开设置选项: 新建一个token: 如图:  记住这个token值 转到vscode 按shift+alt +u  在弹出窗里输入你的token,然后等下会生成syncSummary.txt文件在窗口中打开这样就算成功了. syncSummary.txt这个文件里有个gist值或者到用户设置文件中查看gist的值,这个值用来你再另一台电脑上来下载你的设置 下载你的设置方法为:打开vscode--按alt+shi

VSCode 如何同步设置

微软新推出的 VSCode 是一款开源.轻量.良心的开发工具,一经问世,迅速受到全球广泛开发者的好评与青睐,威风之下有干掉 Sublime Text 的趋势.然而有不少 VSCode 使用者吐槽其不能导出导入或同步设置文件,其实他们错了.如何实现 VSCode 设置的同步? 1.你得拥有你的 GitHub 账号 有则登录,无则注册(官网 https://github.com/). 2.新建一个 gist 3.获取 gist ID号 4.返回 GitHub,进入设置页创建令牌 创建令牌(Token

双主,主从同步设置的重要参数log_slave_updates

说明:最近部署了mysql的集群环境,详细如下M01和M02为主主复制,M01和R01为主从复制:在测试的过程中发现了以下问题: 1.M01和M02的主主复制是没有问题的(从M01写入数据能同步到M02,从M02写入数据能够同步到M01); 2.主从同步的时候,当从M01写入的时候,数据可以写入到R01: 3.当从M02写入的时候,数据就不能写入到R01: 问题的原因:log_slave_updates参数的状态为NO mysql的官网说明如下: Normally, a slave does n

mysql主从同步设置

1.主服务器地址:192.168.1.244    从服务器地址:192.168.1.245 2.主服务器master设置 1)修改/etc/my.cnf 添加: log-bin = /home/mysql/log/mysql-bin.log server-id=244 (注:主从server id不可重复,建议以IP地址设置) 2)登录mysql 创建用户sync并授权192.168.1.245 mysql> GRANT REPLICATION SLAVE ON *.* to 'sync'@'