4.java+selenium+maven:常用API和元素等待
一、WebElement常用API
click():触发当前元素的点击事件
clear():清空内容
sendKeys():文本框中写入内容、按键操作
element.sendKeys(Keys.CONTROL,"a");//ctrl+a 全选 element.sendKeys(Keys.CONTROL,"x");//ctrl+x 剪切 element.sendKeys(Keys.CONTROL,"c");//ctrl+c 复制 element.sendKeys(Keys.CONTROL,"v");//ctrl+v 粘贴 element.sendKeys(Keys.ENTER);//回车 element.sendKeys(Keys.BACK_SPACE);//删除 element.sendKeys(Keys.SPACE);//空格键
getTagName():获取元素的标签名
getAttribute(属性名):根据属性名获取元素属性值
getText():获取当前元素的文本值
二、WebDriver常用API
get(String url):访问指定url页面
getCurrentUrl():获取当前页面的url地址
getTitle():获取当前页面的标题
getPageSource():获取当前页面源代码
quit():关闭驱动对象以及所有相关的窗口
close():关闭当前窗口
navigate对象:导航栏,关于浏览器的基本功能操作,大部分都是由navigate对象提供的
//获取navigate对象 Navigation navigation = driver.navigate(); //访问指定的url地址 navigation.to("https://www.jd.com"); Thread.sleep(2000); //刷新当前页面 navigation.refresh(); Thread.sleep(2000); //浏览器回退操作 navigation.back(); Thread.sleep(2000); //浏览器前进操作 navigation.forward(); Thread.sleep(2000); driver.quit();
window基本操作:关于窗口的设置,基本都是由window对象提供的
//获取window对象 Window window = driver.manage().window(); //窗口位置 Point point = window.getPosition(); System.out.println(point.getX()); System.out.println(point.getY()); //窗口大小 Dimension dimension = window.getSize(); System.out.println(dimension.getWidth()); System.out.println(dimension.getHeight()); //最大化 window.maximize(); //全屏 window.fullscreen(); Thread.sleep(2000); driver.quit();
三、时间等待
1.硬性等待
Thread.sleep(long millis)
2.隐式等待
driver.manage.timeouts().implicitlyWait(long time,TimeUnit unit);
在设置的超时时间范围内不断查找元素,直到找到元素或者超时为止
缺点:
设置时针对全局的,在WebDriver实例整个声明周期有效,但并不是所有的元素都需要等待
只能等待元素存在,不能适用条件更复杂的情况,如元素可点击、元素可见
3.显示等待
显示等待通常是自己自定义的代码,用来等待某个条件发生后再继续执行后续代码(如元素存在、元素可点击、元素可见等)
WebDriverWait wait = new WebDriverWait();
WebElement element = wait.until(expectCondition);
优点:
每个一段时间扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在,不存在则继续等待,直到找到或超时
该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这种方式
方法 | 等待条件 |
presenceOfElementLocated | 页面元素再页面中存在 |
visibilityOfElementLocated | 页面元素再页面存在并且可见 |
elementToBeClickable | 页面元素是否再页面上可被点击 |
WebElement webElement = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='高级搜索']/..")));
WebElement webElement = webDriverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='高级搜索']/..")));
WebElement webElement = webDriverWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[text()='高级搜索']/..")));
4. FluentWait一直等待直到某个条件出现
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("www.test.com"); driver.manage().window().maximize(); Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(45, TimeUnit.SECONDS) .pollingEvery(5, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); WebElement ele1 = wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(By.id("xxxxxxx")); } });