selenium 对浏览器的操控 java

driver.navigate().back();     后退

driver.navigate().forward();   前进

driver.navigate().refresh();    刷新

driver.manage().window().maximize();   最大化

 

// 进入 id 叫frameA 的 iframe
dr.switchTo().frame("frameA");
// 回到主窗口 dr.switchTo().defaultContent();

Iframe操作

  1. 如果iframe标签有能够唯一确定的id或者name,就可以直接用id或者name的值:driver.switchTo().frame("aa");
  2. 如果iframe标签没有id或者name,但能够通过页面上确定其是第几个(也就是通过index来定位iframe,index是从0开始的):driver.switchTo().frame(0);
  3. 还可以通过xpath的方式来定位iframe,写法如下:
    1. WebElement iframe = driver.findElement(By.xpath("//iframe[@name='aa']"));
    2.  driver.switchTo().frame(iframe); 
复制代码
复制代码
    public void testIFrame(){
        driver.findElement(By.id("user")).sendKeys("test");
        driver.switchTo().frame("aa");
        driver.findElement(By.id("user")).sendKeys("iframe test");
        driver.switchTo().defaultContent();//返回顶层frame
        driver.findElement(By.id("user")).sendKeys("---new test");
    }

最近正在进行webdriver的web级自动化测试代码的编写,遇到一个问题:页面有三个标签,单击一个标签打开一页,要对第二个标签打开的页面进行定位操作,可是总是定位不到。查看一下代码,发现这个标签打开的是一个新页面,在iframe中嵌套着呢,于是在网上搜了一下相关的定位方法。

    例如,现有HTML代码如下:
  1. main.html   
  2. <</span>html>  
  3.     <</span>head>  
  4.         <</span>title>FrameTest</</span>title>  
  5.     </</span>head>  
  6.     <</span>body>  
  7.     <</span>div id = "id1">this is a div!</</span>div>  
  8.         <</span>iframe id = "frame1"  frameborder="0" scrolling="no" style="left:0;position:absolute;" src = "frame.html"></</span>iframe>  
  9.     </</span>body>  
  10. </</span>html>   
  11.   
  12.   
  13. frame.html 
  14. <</span>html>  
  15.     <</span>head>  
  16.         <</span>title>this is a frame!</</span>title>  
  17.     </</span>head>  
  18.     <</span>body>  
  19.     <</span>div id = "div1">this is a div,too!</</span>div>  
  20.     <</span>label>input:</</span>label>  
  21.     <</span>input id = "input1"></</span>input>  
  22.     </</span>body>  
  23. </</span>html>

1.iFrame有ID 或者 name的情况
//进入id="frame1"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame1");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1"))

2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( "/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe" ));
driver.switchTo().frame(frame);

3.跳出iFrame
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1")


WebDriver中处理原生JS的 alert confirm 以及prompt是很方便的(虽然现在原生JS的实现方式用的很少了)。 
具体思路是使用driver.switchTo.alert()方法,定位到当前的 alert/confirm/prompt(这里注意当前页面只能同时含有一个控件,如果多了会报错的,所以这就需要一一处理了),然后在调用Alert 的方法进行操作,Alert提供了以下几个方法:

  1. getText : 返回alert/confirm/prompt中的文字内容
  2. accept : 点击确认按钮
  3. dismiss : 点击取消按钮如果有取消按钮的话
  4. sendKeys : 向prompt中输入文字 
    //这个方法在chromedriver中不起作用,IE11的话也有点问题,现在很少用JS,所以就没去研究,以后用到了再研究吧

html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dialogs:alert,confirm,prompt</title>
</head>
<body>
 <input id = "alert" value = "alert" type = "button" onclick = "alert('欢迎!请按确认继续!');"/>  
 <input id = "confirm" value = "confirm" type = "button" onclick = "confirm('确定吗?');"/>  
 <input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('请输入你的名字:',''); document.write(name) "/>  
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

selenium代码

        WebDriver driver = new FirefoxDriver();
        driver.get("file:///D:/workSpaceIPaaS/selenium.web/src/main/java/webdrivers/dialogs.html");
        // 点击弹出alert
        driver.findElement(By.id("alert")).click();
        Thread.sleep(3000);
        //捕获alert
        Alert alert= driver.switchTo().alert();
        System.out.println("alert text: "+alert.getText());
        //点击取消按钮|关闭
        alert.dismiss();
        Thread.sleep(3000);

        //点击弹出confirm 
        driver.findElement(By.id("confirm")).click();
        Thread.sleep(3000);
        //捕获confirm
        Alert confirm=driver.switchTo().alert();
        System.out.println("confirm text: "+alert.getText());
        //点击确认按钮
        confirm.accept();
        Thread.sleep(3000);

        //点击弹出prompt
        driver.findElement(By.id("prompt")).click();
        Thread.sleep(3000);
        //捕获prompt
        Alert prompt=driver.switchTo().alert();
        System.out.println("promp text: "+prompt.getText());
        Thread.sleep(3000);
        prompt.sendKeys("");
        prompt.sendKeys("java");
        Thread.sleep(3000);
        prompt.accept();
        driver.close();
        driver.quit();  
posted on 2016-04-23 09:14  kitty_zhou  阅读(578)  评论(0编辑  收藏  举报