• WebDriver API 实例详解(四)


    三十一、使用页面的文字内容识别和处理新弹出的浏览器窗口

    被测试网页的HTML源码:

     1 <html>
     2 <head>
     3 <meta charset="UTF-8" content="text/html">
     4 <title>你喜欢的水果</title>
     5 </head>
     6 <body>
     7     <p id="p1">你爱吃的水果么?</p>
     8     <br><br>
     9     <a href="http://www.sogou.com" target="_blank">sogou搜索</a>
    10 </body>
    11 </html>
    View Code

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 import java.util.Set;
     9 
    10 import org.openqa.selenium.By;
    11 import org.openqa.selenium.NoSuchWindowException;
    12 import org.openqa.selenium.WebDriver;
    13 import org.openqa.selenium.WebElement;
    14 import org.openqa.selenium.chrome.ChromeDriver;
    15 import org.testng.Assert;
    16 import org.testng.annotations.AfterMethod;
    17 
    18 public class ChormeOpen {
    19     WebDriver driver;
    20     
    21     @Test
    22     public void opentest() {
    23         File file = new File("");
    24         String url = file.getAbsolutePath() + "/html/" + "file12.html";
    25         driver.get(url);
    26         String parentWindowHandle = driver.getWindowHandle();
    27         WebElement sogouLink = driver.findElement(By.xpath("//a"));
    28         sogouLink.click();
    29         Set<String> allWindowsHandles = driver.getWindowHandles();
    30         if(!allWindowsHandles.isEmpty()){
    31             for(String windowHandle:allWindowsHandles){
    32                 try {
    33                     if(driver.switchTo().window(windowHandle).getPageSource().contains("搜狗搜索")){
    34                         driver.findElement(By.id("query")).sendKeys("sogou");
    35                     }
    36                 } catch (NoSuchWindowException e) {
    37                     // TODO: handle exception
    38                     e.printStackTrace();
    39                 }
    40             }
    41         }
    42         driver.switchTo().window(parentWindowHandle);
    43         Assert.assertEquals(driver.getTitle(), "你喜欢的水果");
    44         try {
    45             Thread.sleep(3000);
    46         } catch (InterruptedException e) {
    47             // TODO Auto-generated catch block
    48             e.printStackTrace();
    49         }
    50     }
    51     
    52   @BeforeMethod
    53   public void beforeMethod() {
    54       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    55         driver = new ChromeDriver();
    56   }
    57 
    58   @AfterMethod
    59   public void afterMethod() {
    60       driver.quit();
    61   }
    62 
    63 }
    View Code

    三十二、操作JavaScript的Alert弹窗

    目的:能够模拟单击弹出的Alert窗口的-‘确定’-按钮

    被测试网页的HTML源码:

    1 <html>
    2 <head>
    3 <meta charset="UTF-8" content="text/html">
    4 <title>你喜欢的水果</title>
    5 </head>
    6 <body>
    7     <input id="button" type="button" onclick="alert('这是一个alert弹出框');" value="单击此按钮"></input>
    8 </body>
    9 </html>
    View Code

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 import java.util.Set;
     9 
    10 import org.openqa.selenium.Alert;
    11 import org.openqa.selenium.By;
    12 import org.openqa.selenium.NoAlertPresentException;
    13 import org.openqa.selenium.NoSuchWindowException;
    14 import org.openqa.selenium.WebDriver;
    15 import org.openqa.selenium.WebElement;
    16 import org.openqa.selenium.chrome.ChromeDriver;
    17 import org.testng.Assert;
    18 import org.testng.annotations.AfterMethod;
    19 
    20 public class ChormeOpen {
    21     WebDriver driver;
    22     
    23     @Test
    24     public void opentest() {
    25         File file = new File("");
    26         String url = file.getAbsolutePath() + "/html/" + "file13.html";
    27         driver.get(url);
    28         WebElement button = driver.findElement(By.xpath("//input"));
    29         button.click();
    30         try {
    31             Thread.sleep(3000);
    32         } catch (InterruptedException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }
    36         try {
    37             Alert alert = driver.switchTo().alert();
    38             Assert.assertEquals("这是一个alert弹出框", alert.getText());
    39             alert.accept();//单击确定按钮
    40         } catch (NoAlertPresentException e) {
    41             // TODO: handle exception
    42             Assert.fail("alert未被找到");
    43             e.printStackTrace();
    44         }
    45         try {
    46             Thread.sleep(3000);
    47         } catch (InterruptedException e) {
    48             // TODO Auto-generated catch block
    49             e.printStackTrace();
    50         }
    51     }
    52     
    53   @BeforeMethod
    54   public void beforeMethod() {
    55       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    56         driver = new ChromeDriver();
    57   }
    58 
    59   @AfterMethod
    60   public void afterMethod() {
    61       driver.quit();
    62   }
    63 
    64 }
    View Code

    三十三、操作JavaScript的confirm弹窗

    目的:能够模拟单击JavaScript弹出的confirm框中的“确定”和“取消”按钮。

    被测试网页的HTML源码:

    1 <html>
    2 <head>
    3 <meta charset="UTF-8" content="text/html">
    4 <title>你喜欢的水果</title>
    5 </head>
    6 <body>
    7     <input id="button" type="button" onclick="confirm('这是一个confirm弹出框');" value="单击此按钮"></input>
    8 </body>
    9 </html>
    View Code

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 
     9 import org.openqa.selenium.Alert;
    10 import org.openqa.selenium.By;
    11 import org.openqa.selenium.NoAlertPresentException;
    12 import org.openqa.selenium.WebDriver;
    13 import org.openqa.selenium.WebElement;
    14 import org.openqa.selenium.chrome.ChromeDriver;
    15 import org.testng.Assert;
    16 import org.testng.annotations.AfterMethod;
    17 
    18 public class ChormeOpen {
    19     WebDriver driver;
    20     
    21     @Test
    22     public void opentest() {
    23         File file = new File("");
    24         String url = file.getAbsolutePath() + "/html/" + "file14.html";
    25         driver.get(url);
    26         WebElement button = driver.findElement(By.xpath("//input"));
    27         button.click();
    28         try {
    29             Thread.sleep(3000);
    30         } catch (InterruptedException e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34         try {
    35             Alert alert = driver.switchTo().alert();
    36             Assert.assertEquals("这是一个confirm弹出框", alert.getText());
    37             //alert.accept();//单击确定按钮
    38             alert.dismiss();//单击取消
    39         } catch (NoAlertPresentException e) {
    40             // TODO: handle exception
    41             Assert.fail("confirm未被找到");
    42             e.printStackTrace();
    43         }
    44         try {
    45             Thread.sleep(3000);
    46         } catch (InterruptedException e) {
    47             // TODO Auto-generated catch block
    48             e.printStackTrace();
    49         }
    50     }
    51     
    52   @BeforeMethod
    53   public void beforeMethod() {
    54       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    55         driver = new ChromeDriver();
    56   }
    57 
    58   @AfterMethod
    59   public void afterMethod() {
    60       driver.quit();
    61   }
    62 
    63 }
    View Code

    三十四、操作JavaScript的prompt弹窗

    目的:能够在JavaScript的prompt弹窗中输入自定义的字符串,单击“确定”按钮和“取消”按钮。

    被测试网页的HTML源码:

    1 <html>
    2 <head>
    3 <meta charset="UTF-8" content="text/html">
    4 <title>你喜欢的水果</title>
    5 </head>
    6 <body>
    7     <input id="button" type="button" onclick="prompt('这是一个prompt弹出框');" value="单击此按钮"></input>
    8 </body>
    9 </html>
    View Code

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 
     9 import org.openqa.selenium.Alert;
    10 import org.openqa.selenium.By;
    11 import org.openqa.selenium.NoAlertPresentException;
    12 import org.openqa.selenium.WebDriver;
    13 import org.openqa.selenium.WebElement;
    14 import org.openqa.selenium.chrome.ChromeDriver;
    15 import org.testng.Assert;
    16 import org.testng.annotations.AfterMethod;
    17 
    18 public class ChormeOpen {
    19     WebDriver driver;
    20     
    21     @Test
    22     public void opentest() {
    23         File file = new File("");
    24         String url = file.getAbsolutePath() + "/html/" + "file15.html";
    25         driver.get(url);
    26         WebElement button = driver.findElement(By.xpath("//input"));
    27         button.click();
    28         try {
    29             Thread.sleep(3000);
    30         } catch (Exception e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34         try {
    35             Alert alert = driver.switchTo().alert();
    36             Assert.assertEquals("这是一个prompt弹出框", alert.getText());
    37             alert.sendKeys("想改变命运,就必须每天学习2小时");
    38             Thread.sleep(3000);
    39             alert.accept();//单击确定按钮
    40             //alert.dismiss();//单击取消
    41         } catch (NoAlertPresentException e) {
    42             // TODO: handle exception
    43             Assert.fail("confirm未被找到");
    44             e.printStackTrace();
    45         }catch (Exception e) {
    46             // TODO: handle exception
    47             e.printStackTrace();
    48         }
    49         try {
    50             Thread.sleep(3000);
    51         } catch (Exception e) {
    52             // TODO Auto-generated catch block
    53             e.printStackTrace();
    54         }
    55     }
    56     
    57   @BeforeMethod
    58   public void beforeMethod() {
    59       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    60         driver = new ChromeDriver();
    61   }
    62 
    63   @AfterMethod
    64   public void afterMethod() {
    65       driver.quit();
    66   }
    67 
    68 }
    View Code

    三十五、操作Frame中的页面元素

    目的:能够进入页面的不同Frame中进行页面元素的操作。

    被测试网页的HTML源码:

    frameset.html
    frame_left.html
    frame_middle.html
    frame_right.html

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 
     9 import org.openqa.selenium.By;
    10 import org.openqa.selenium.WebDriver;
    11 import org.openqa.selenium.WebElement;
    12 import org.openqa.selenium.chrome.ChromeDriver;
    13 import org.testng.Assert;
    14 import org.testng.annotations.AfterMethod;
    15 
    16 public class ChormeOpen {
    17     WebDriver driver;
    18     
    19     @Test
    20     public void opentest() {
    21         File file = new File("");
    22         String url = file.getAbsolutePath() + "/html/" + "frameset.html";
    23         driver.get(url);
    24         driver.switchTo().frame("leftframe");
    25         WebElement leftframeText = driver.findElement(By.xpath("//p"));
    26         Assert.assertEquals("这是左侧frame页面上的文字", leftframeText.getText());
    27         driver.switchTo().defaultContent();
    28         //
    29         driver.switchTo().frame("middleframe");
    30         WebElement middleframeText = driver.findElement(By.xpath("//p"));
    31         Assert.assertEquals("这是中间frame页面上的文字", middleframeText.getText());
    32         driver.switchTo().defaultContent();
    33         //
    34         driver.switchTo().frame("rightframe");
    35         WebElement rightframeText = driver.findElement(By.xpath("//p"));
    36         Assert.assertEquals("这是右侧frame页面上的文字", rightframeText.getText());
    37         driver.switchTo().defaultContent();
    38         //
    39         //使用索引。从0开始
    40         driver.switchTo().frame(1);
    41         middleframeText = driver.findElement(By.xpath("//P"));
    42         Assert.assertEquals("这是中间frame页面上的文字", middleframeText.getText());
    43         
    44         try {
    45             Thread.sleep(3000);
    46         } catch (Exception e) {
    47             // TODO Auto-generated catch block
    48             e.printStackTrace();
    49         }
    50     }
    51     
    52   @BeforeMethod
    53   public void beforeMethod() {
    54       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    55         driver = new ChromeDriver();
    56   }
    57 
    58   @AfterMethod
    59   public void afterMethod() {
    60       driver.quit();
    61   }
    62 
    63 }
    View Code

    三十六、使用Frame中的HTML源码内容来操作Frame

    目的:能够使用Frame页面的HTML源码定位指定的Frame页面并进行操作。

    被测试网页的HTML源码:

    三十五被测试页面的HTML源码。

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 import java.util.List;
     9 
    10 import org.openqa.selenium.By;
    11 import org.openqa.selenium.WebDriver;
    12 import org.openqa.selenium.WebElement;
    13 import org.openqa.selenium.chrome.ChromeDriver;
    14 import org.testng.Assert;
    15 import org.testng.annotations.AfterMethod;
    16 
    17 public class ChormeOpen {
    18     WebDriver driver;
    19     
    20     @Test
    21     public void opentest() {
    22         File file = new File("");
    23         String url = file.getAbsolutePath() + "/html/" + "frameset.html";
    24         driver.get(url);
    25         List<WebElement> frames = driver.findElements(By.tagName("frame"));
    26         for(WebElement frame:frames){
    27             driver.switchTo().frame(frame);
    28             if(driver.getPageSource().contains("中间frame")){
    29                 WebElement middleframeText = driver.findElement(By.xpath("//p"));
    30                 Assert.assertEquals("这是中间frame页面上的文字", middleframeText.getText());
    31                 break;
    32             }else{
    33                 driver.switchTo().defaultContent();
    34             }
    35         }
    36         driver.switchTo().defaultContent();
    37         try {
    38             Thread.sleep(3000);
    39         } catch (Exception e) {
    40             // TODO Auto-generated catch block
    41             e.printStackTrace();
    42         }
    43     }
    44     
    45   @BeforeMethod
    46   public void beforeMethod() {
    47       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    48         driver = new ChromeDriver();
    49   }
    50 
    51   @AfterMethod
    52   public void afterMethod() {
    53       driver.quit();
    54   }
    55 
    56 }
    View Code

    三十七、操作IFrame中的页面元素

    被测试网页的HTML源码:

    三十五被测试页面的HTML源码,只是需要更新如下页面的HTML源码:

    修改frame_left.html源码:

    frame_left.html

    在frame_left.html同级目录下新增iframe.html文件:

    iframe.html

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.io.File;
     8 import org.openqa.selenium.By;
     9 import org.openqa.selenium.WebDriver;
    10 import org.openqa.selenium.WebElement;
    11 import org.openqa.selenium.chrome.ChromeDriver;
    12 import org.testng.Assert;
    13 import org.testng.annotations.AfterMethod;
    14 
    15 public class ChormeOpen {
    16     WebDriver driver;
    17     
    18     @Test
    19     public void opentest() {
    20         File file = new File("");
    21         String url = file.getAbsolutePath() + "/html/" + "frameset.html";
    22         driver.get(url);
    23         driver.switchTo().frame("leftframe");
    24         WebElement iframe = driver.findElement(By.tagName("iframe"));
    25         driver.switchTo().frame(iframe);
    26         WebElement p = driver.findElement(By.xpath("//p"));
    27         Assert.assertEquals("这是iframe页面上的文字", p.getText());
    28         driver.switchTo().defaultContent();
    29         driver.switchTo().frame("middleframe");
    30         try {
    31             Thread.sleep(3000);
    32         } catch (Exception e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }
    36     }
    37     
    38   @BeforeMethod
    39   public void beforeMethod() {
    40       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    41         driver = new ChromeDriver();
    42   }
    43 
    44   @AfterMethod
    45   public void afterMethod() {
    46       driver.quit();
    47   }
    48 
    49 }
    View Code

    三十八、操作浏览器的Cookie

    目的:能够遍历输出所有的Cookie的Key和value;能够删除指定的Cookie对象;能够删除所有的Cookie对象。

    被测试网页的地址:

    http:www.sogou.com

    Java语言版本的API实例代码:

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 import java.util.Set;
     7 import org.openqa.selenium.Cookie;
     8 import org.openqa.selenium.WebDriver;
     9 import org.openqa.selenium.chrome.ChromeDriver;
    10 import org.testng.annotations.AfterMethod;
    11 
    12 public class ChormeOpen {
    13     WebDriver driver;
    14     String url = "http://www.sogou.com";
    15     @Test
    16     public void opentest() {
    17         driver.get(url);
    18         Set<Cookie> cookies = driver.manage().getCookies();
    19         Cookie newCookie = new Cookie("cookieName","cookieValue");
    20         System.out.println(String.format("Domain-> name -> value -> expiry -> path"));
    21         for(Cookie cookie:cookies){
    22             System.out.println(String.format("%s-> %s -> %s -> %s -> %s",
    23                     cookie.getDomain(),cookie.getName(),
    24                     cookie.getValue(),cookie.getExpiry(),cookie.getPath()));
    25         }
    26         //删除cookie的3种方法
    27         //1
    28         driver.manage().deleteCookieNamed("CookieName");
    29         
    30         //2
    31         driver.manage().deleteCookie(newCookie);
    32         
    33         //3
    34         driver.manage().deleteAllCookies();
    35         
    36         try {
    37             Thread.sleep(3000);
    38         } catch (Exception e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         }
    42     }
    43     
    44   @BeforeMethod
    45   public void beforeMethod() {
    46       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    47         driver = new ChromeDriver();
    48   }
    49 
    50   @AfterMethod
    51   public void afterMethod() {
    52       driver.quit();
    53   }
    54 
    55 }
    View Code
  • 相关阅读:
    form查询相关表
    获取datagrid更新初始值、新值
    数据库约束查询
    强名称工具(来着.NET)
    使用IE插件不能打开的解决
    导入导出报错
    List批量任务多线程执行工具类
    在C#中使用NHibernate框架查询数据
    使用bat文件顺序执行多个应用程序
    用C#实现抽象工厂模式
  • 原文地址:https://www.cnblogs.com/successcai/p/6664850.html
Copyright © 2020-2023  润新知