Selenium&Appium四种等待方式

Selenium&Appium四种等待方式

一、摘要

本博文主要介绍自动化测试中,无论是selenium或是Appium的四种等待方式,合理的使用等待对代码的稳定性,测试效率都有很大的提高

  • 隐式等待:是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间。默认设置是0秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期
  • 显示等待:定义了等待条件,只有该条件触发,才执行后续代码。
  • 强制等待:指定了固定的等待时长,单位秒
  • Fluent Wait:他是显示等待的一种,他允许我们定义轮询间隔、忽略某种异常、超时时间等

 二、实例代码

// Java
/*
 * @FileName Wait_Demo:
 * @author davieyang
 * @create 2018-11-29 14:10
 */
package testscript;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.*;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import org.apache.log4j.xml.DOMConfigurator;
import org.openqa.selenium.*;
import org.testng.annotations.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

@Listeners({util.TestReport.class})
public class Wait_Demo {
    AndroidDriver driver;
    static {
        //指定log4j配置文件为log4j.xml
        DOMConfigurator.configure("log4j.xml");
    }
    @BeforeClass
    public void setUp()throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        // des.setCapability("app", "c:\\");
        caps.setCapability("automationname", "Appium");
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "23");
        caps.setCapability("udid", "WTKDU17105005171");
        caps.setCapability("deviceName", "Honor");
        caps.setCapability("appPackage", "com.tencent.Q108");//com.android.contacts
        caps.setCapability("appActivity", "com.tencent.Q108.SplashActivity");//.activities.PeopleActivity
        caps.setCapability("appWaitActivity", "com.tencent.Q108.SplashActivity");
        caps.setCapability("unicodeKeyboard", "True");
        caps.setCapability("resetKeyboard", "True");
        caps.setCapability("newCommandTimeout", "15");
        caps.setCapability("nosign", "True");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),caps);
        //隐式等待
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    @Test
    public void test_() {
     // 强制等待
     Thread.sleep(10);
// 显式等待 WebDriverWait explicitwait = new WebDriverWait(driver, 10); explicitwait.until(ExpectedConditions.visibilityOfElementLocated(By.id("text1"))); // 流畅等待 FluentWait<WebDriver> fluentwait = new FluentWait<WebDriver>(driver) .withTimeout(10, TimeUnit.SECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(TimeoutException.class); fluentwait.until(ExpectedConditions.visibilityOfElementLocated(By.id("text1"))); } @AfterClass public void tearDown() { driver.closeApp(); } }

 三、显示等待,条件判断

Selenium&Appium四种等待方式

 

posted @ 2018-12-04 13:51 davieyang 阅读(...) 评论(...) 编辑 收藏