package javaBase; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.util.concurrent.TimeUnit; /** * java selenium 页面加载 * 我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作。 否则页面上的元素不存在,会抛出异常。 * * 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作 * * selenium 中提供了非常简单,智能的方法,来判断元素是否存在. * * 实例:html * 点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div 然后高亮。 */ public class TestSetSeleniumServerJAR { public static void main(String[] args) { //谷歌浏览器 WebDriver driver = new ChromeDriver(); /** * 隐式等待 */ /* driver.get("http://localhost:8888/Selenium/"); / //总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常 org.openqa.selenium.NoSuchElementException driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement element = driver.findElement(By.cssSelector(".red_box")); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element); */ /** * 显式等待 * * 显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。 * * 显式等待可以自定义等待的条件,用于更加复杂的页面等待条件 * */ driver.get("http://localhost:8888/Selenium/"); /** *只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑 * * 如果超过设定的最大显式等待时间阈值, 这测试程序会抛出异常。 */ WebDriverWait wait = new WebDriverWait(driver, 20); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box"))); WebElement element = driver.findElement(By.cssSelector(".red_box")); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element); /** * 等待的条件 * * WebDriver方法 * * 页面元素是否在页面上可用和可被单击 * * elementToBeClickable(By locator) * * 页面元素处于被选中状态 * * elementToBeSelected(WebElement element) * * 页面元素在页面中存在 * * presenceOfElementLocated(By locator) * * 在页面元素中是否包含特定的文本 * * textToBePresentInElement(By locator) * * 页面元素值 * * textToBePresentInElementValue(By locator, java.lang.String text) * * 标题 (title) * * titleContains(java.lang.String title) */ } }