• 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( );

  • 相关阅读:
    Codeforces Beta Round #6 (Div. 2 Only)
    Codeforces Beta Round #5
    Codeforces Beta Round #4 (Div. 2 Only)
    Codeforces Beta Round #3
    Codeforces Beta Round #2
    Codeforces Beta Round #1
    HDU 4020 Ads Proposal
    SRM 615 DIV1 500
    求1+2+……+n(位运算)
    好好加油!
  • 原文地址:https://www.cnblogs.com/yjh1995/p/11986506.html
Copyright © 2020-2023  润新知