Appnium、Selenium常用的等待元素的三种方法

学过或者了解过Appium、Selenium都知道,等待元素加载一般常用的三种方法:
  • 强制等待
  • 隐试等待
  • 显示等待
(1)强制等待    ----sleep
示例:Thread.sleep(10000);         强制等待10s
强制等待方式不是全局限制,10s的等待时间只是对当前操作生效。
package com.sandy;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementWait {

	private static WebDriver driver;
	public static void main(String[] args) throws Exception {
		System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
		driver = new ChromeDriver();
		
		driver.get("http://www.baidu.com/");
		driver.manage().window().maximize();  //最大化
		
		WebElement element = driver.findElement(By.name("tj_trnews"));  //目标元素
		Thread.sleep(1000);  //强制等待1s
		
		driver.quit();
	}
	
}


(2)隐式等待   ----implicitlyWait
示例:driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
全局等待30s,不管元素是否已经加载出来。
当使用了隐式等待的时候,如果WebDriver没有找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0
 一旦设置了隐式等待,则它存在整个WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢。
它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
implicitly_wait()方法比sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

package com.sandy;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementWait {

	private static WebDriver driver;
	public static void main(String[] args) throws Exception {
		System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
		driver = new ChromeDriver();
		
		driver.get("http://www.baidu.com/");
		driver.manage().window().maximize();  //最大化
		
		WebElement element = driver.findElement(By.name("tj_trnews"));  //目标元素
		driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);  //隐式等待
		
		driver.quit();
	}
	
}

(3)显示等待  ----WebDriverWait
显示等待,这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait 和util来决定,如果该元素在设置的等待时间(示例设置的时间是30s)以内出现就不在等待。
显示等待也可以这样写:
WebElement element = (new WebDriverWait(driver, 30).until(ExpectedConditions.presenceOfElementLocated(By.name("tj_trnews"))));
package com.sandy;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ElementWait {

	private static WebDriver driver;
	public static void main(String[] args) throws Exception {
		System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
		driver = new ChromeDriver();
		
		driver.get("http://www.baidu.com/");
		driver.manage().window().maximize();  //最大化
		
		/**
		 * 显示等待,等待时间设置的时30s
		 * element即时所需要等待的元素
		 */
		WebDriverWait wait = new WebDriverWait(driver, 30);
		WebElement element = wait.until(new ExpectedCondition<WebElement>() {
			@Override
			public WebElement apply(WebDriver driver) {
				return driver.findElement(By.name("tj_trnews"));
			}
		});
		
		driver.quit();
	}
	
}
在使用 Python 的 Selenium 进行自动化测试时,有时候需要等待页面元素加载完毕才能进行下一步操作,否则可能会出现找不到元素或者元素还没有加载完全的情况。下面介绍三种设置元素等待方法。 1. 隐式等待 隐式等待是设置一个全局等待时间,当查找元素时如果未能立即找到则会等待一段时间,直到超时为止。这种等待方式在整个测试过程中都有效,比较方便。 示例代码: ```python from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 隐式等待10秒 # 接下来的操作,在元素加载完毕前最多等待10秒 ``` 2. 显式等待 显式等待是指在代码中指定等待条件,当满足条件时才进行下一步操作。这种等待方式更加灵活,可根据具体场景设置不同的等待条件,比如等待元素可见、可点击、出现在页面中等。 示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) # 显式等待10秒 # 等待元素可见 element = wait.until(EC.visibility_of_element_located((By.ID, 'myId'))) # 等待元素可点击 element = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[text()="Click Me"]'))) ``` 3. sleep 等待 sleep 是最简单的等待方式,它会暂停当前线程指定的时间,不管页面元素是否已经加载完毕。这种等待方式不太灵活,如果页面元素加载时间较长,可能会导致等待时间不够,从而出现找不到元素的情况。 示例代码: ```python from selenium import webdriver import time driver = webdriver.Chrome() # 等待3秒 time.sleep(3) # 接下来的操作,在元素加载完毕前最多等待3秒 ``` 以上三种等待方式,根据实际情况选择合适的方式即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值