zoukankan      html  css  js  c++  java
  • 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();  
  • 相关阅读:
    Restful、SOAP、RPC、SOA、微服务之间的区别
    SOA(面向服务的架构.)、RPC(远程过程调用)思想
    facade层,service 层,domain层,dao 层设计
    Mac下配置alias,zsh终端命令别名
    .bash_profile 和.zshrc
    什么是零担物流?零担物流的五大特点
    零担是什么意思,零担物流和快递有什么区别
    idea vm options
    idea中 VM options配置
    ES配置生命周期策略
  • 原文地址:https://www.cnblogs.com/kitty-zhou/p/5423861.html
Copyright © 2011-2022 走看看