selenium

Posted yjh1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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( );

 

以上是关于selenium的主要内容,如果未能解决你的问题,请参考以下文章

Selenium JavascriptExecutor 详解

Selenium JavascriptExecutor 详解

有没有办法关闭代码片段中的命名建议?

selenium之调用Javascript

selenium+Python(处理html5的视频播放)

使用 Java 的 Selenium WebDriver (Selenium 2) 中 selenium.refresh() 的等效代码