selenium(五)
1.等待时间
(1)使用线程等待
Thread.sleep(3000);
(2)等待直到所有元素加载完成
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)
(3)等待直到某一个元素加载完成
public void waitElement(WebDriver driver, int time, final String xpathstr){ WebDriverWait wait = new WebDriverWait(driver,time); wait.until(new ExpectedCondition<WebElement>(){ @Override public WebElement apply(WebDriver d) { return d.findElement(By.xpath(xpathstr)); } }); }
2.获取cookie
Set<Cookie> cookies = dr.manage().getCookies();
同样有 addCookie 和 deleteCookie
3.截图
需要添加 Apache 的 io 包: https://mvnrepository.com/artifact/commons-io/commons-io
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
代码如下
//设置文件路径String screenShotName="E:\\scrShoot.png"; //新建文件 File scrShoot=new File(screenShotName); //截图 File tmp=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//将截图的临时文件拷贝到 新建的scrShoot FileUtils.copyFile(tmp,scrShoot);
4.iframe 处理
元素定位时如果遇到iframe,driver需要进入iframe中,才能定位到iframe中的元素,跳转iframe需要层层跳转,就像画中画一样
进入iframe:driver.switchTo().frame(参数),参数可为 iframe的 id、name,webElement,int i( i 表示 iframe的index)
回到原网页:driver.switchTo().defaultContent();
5.多窗口 处理
当操作某个元素弹出第二个窗口时,driver需要进入第二个窗口才能定位到该窗口的元素,可以通过句柄来切换窗口
获取句柄:
一个窗口,一个句柄:String defaultWindow=driver.getWindowHandle();
多个窗口,多个句柄:Set<String> windows=driver.getWindowHandles();
切换窗口:driver.switchTo().window(String s); 参数s是句柄
driver.get("http://www.qq.com"); //获取第一个句柄 String defaultWindow=driver.getWindowHandle(); //打开新窗口,并且等待一下,等待元素加载 driver.findElement(By.linkText("新闻")).click(); Thread.sleep(3000); //获取所有句柄 Set<String> windows=driver.getWindowHandles(); for(String window:windows){ //也可以写为!window.endsWith(defaultWindow) if(!window.equals(defaultWindow)){ //driver切换到第二个窗口,并且等待一下 driver=driver.switchTo().window(window); Thread.sleep(3000); } } //第二个页面操作元素 driver.findElement(By.linkText("推荐")).click(); Thread.sleep(3000); //关闭第二个窗口 driver.close(); //切回原窗口 driver.switchTo().window(defaultWindow); driver.findElement(By.linkText("图片")).click();
也可以通过判断窗口的 title 来切换窗口
7. alert弹出框
操作某些元素时,可能会出现一个弹框,不处理这个弹框可能就无法操作页面元素,这时需要将driver切进弹框中
跳入弹框:Alert alert=driver.switchTo().alert();
一般弹框只有以下几种操作:
点击确定:alert.accept( );
点击取消:alert.dismiss( )
获取文本:alert.getText( );
输入内容:alert.sendKeys( );