selenium(五)

1.等待时间

(1)使用线程等待

  Thread.sleep(3000);

(2)等待直到所有元素加载完成(隐式等待 driver

  driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)

(3)等待直到某一个元素加载完成(显式等待 WebDriverWait

复制代码
 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( );

 

posted @   hjy1995  阅读(691)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示