zoukankan      html  css  js  c++  java
  • WebDriver API 实例详解(三)

    二十一、模拟鼠标右键事件

    被测试网页的网址:

    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 org.openqa.selenium.By;
     7 import org.openqa.selenium.WebDriver;
     8 import org.openqa.selenium.chrome.ChromeDriver;
     9 import org.openqa.selenium.interactions.Actions;
    10 import org.testng.annotations.AfterMethod;
    11 
    12 public class ChormeOpen {
    13     WebDriver driver;
    14     String url = "http://www.sogou.com";
    15 
    16     @Test
    17     public void opentest() {
    18         driver.get(url);
    19         try {
    20             Thread.sleep(3000);
    21         } catch (InterruptedException e) {
    22             // TODO Auto-generated catch block
    23             e.printStackTrace();
    24         }
    25         Actions action = new Actions(driver);
    26         action.contextClick(driver.findElement(By.id("query"))).perform();
    27         try {
    28             Thread.sleep(3000);
    29         } catch (InterruptedException e) {
    30             // TODO Auto-generated catch block
    31             e.printStackTrace();
    32         }
    33     }
    34     
    35   @BeforeMethod
    36   public void beforeMethod() {
    37       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    38         driver = new ChromeDriver();
    39   }
    40 
    41   @AfterMethod
    42   public void afterMethod() {
    43       driver.quit();
    44   }
    45 
    46 }
    View Code

    二十二、在指定元素上方进行鼠标悬浮

    被测试网页的HTML源码:

     1 <html>
     2 <head>
     3 <meta charset="UTF-8" content="text/html">
     4 <script type="text/javascript">
     5     function showNone(){
     6         document.getElementById('div1').style.display = "none";
     7     }
     8     function showBlock(){
     9         document.getElementById('div1').style.display = "block";
    10     }
    11 </script>
    12 <style type="text/css">
    13     #div1{
    14         position:absolute;
    15         width:200px;
    16         height:125px;
    17         z-index:1;
    18         left:28px;
    19         top:34px;
    20         background-color:#0033CC;
    21     }
    22 </style>
    23 </head>
    24 <body onload="showNone()">
    25     <div id="div1"></div>
    26     <a onmouseover="showBlock()" id="link1">鼠标指过来</a>
    27     <a onmouseover="showNone()" id="link2">鼠标指过来</a>    
    28 </body>
    29 </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.By;
    10 import org.openqa.selenium.WebDriver;
    11 import org.openqa.selenium.WebElement;
    12 import org.openqa.selenium.chrome.ChromeDriver;
    13 import org.openqa.selenium.interactions.Actions;
    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/" + "file9.html";
    23         driver.get(url);
    24         WebElement link1 = driver.findElement(By.xpath("//a[@id='link1']"));
    25         WebElement link2 = driver.findElement(By.xpath("//a[@id='link2']"));
    26         Actions action = new Actions(driver);
    27         action.moveToElement(link1).perform();
    28         try {
    29             Thread.sleep(3000);
    30         } catch (InterruptedException e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34         action.moveToElement(link2).perform();
    35         try {
    36             Thread.sleep(3000);
    37         } catch (InterruptedException e) {
    38             // TODO Auto-generated catch block
    39             e.printStackTrace();
    40         }
    41     }
    42     
    43   @BeforeMethod
    44   public void beforeMethod() {
    45       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    46         driver = new ChromeDriver();
    47   }
    48 
    49   @AfterMethod
    50   public void afterMethod() {
    51       driver.quit();
    52   }
    53 
    54 }
    View Code

    二十三、在指定元素上进行鼠标单击左键和释放的操作

    被测试网页的HTML源码:

     1 <html>
     2 <head>
     3 <meta charset="UTF-8" content="text/html">
     4 <script type="text/javascript">
     5     function mouseDownFun(){
     6         document.getElementById('div1').innerHTML += '鼠标左键被按下<br/>';
     7     }
     8     function mouseUpFun(){
     9         document.getElementById('div1').innerHTML += '已经被按下的鼠标左键被释放抬起<br/>';
    10     }
    11     function clickFun(){
    12         document.getElementById('div1').innerHTML += '单击动作发生<br/>';
    13     }
    14 </script>
    15 
    16 </head>
    17 <body>
    18     <div id="div1" onmousedown="mouseDownFun();" onmouseup="mouseUpFun();" onclick="clickFun();"
    19         style="background: #CCC;border: 3px solid #999; 200px;height: 200px;padding: 10px"></div>
    20     <input style="margin-top:10px;" type="button" onclick="document.getElementById('div1').innerHTML='';" value="清除信息">
    21 </body>
    22 </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.By;
    10 import org.openqa.selenium.WebDriver;
    11 import org.openqa.selenium.WebElement;
    12 import org.openqa.selenium.chrome.ChromeDriver;
    13 import org.openqa.selenium.interactions.Actions;
    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/" + "file10.html";
    23         driver.get(url);
    24         WebElement div = driver.findElement(By.xpath("//div[@id='div1']"));
    25         Actions action = new Actions(driver);
    26         action.clickAndHold(div).perform();//单击不释放
    27         try {
    28             Thread.sleep(3000);
    29         } catch (InterruptedException e) {
    30             // TODO Auto-generated catch block
    31             e.printStackTrace();
    32         }
    33         action.release(div).perform();//释放
    34         try {
    35             Thread.sleep(3000);
    36         } catch (InterruptedException e) {
    37             // TODO Auto-generated catch block
    38             e.printStackTrace();
    39         }
    40     }
    41     
    42   @BeforeMethod
    43   public void beforeMethod() {
    44       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    45         driver = new ChromeDriver();
    46   }
    47 
    48   @AfterMethod
    49   public void afterMethod() {
    50       driver.quit();
    51   }
    52 
    53 }
    View Code

    二十四、查看页面元素的属性

    被测试网页的网址:

    http://www.baidu.com

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import org.openqa.selenium.By;
     8 import org.openqa.selenium.WebDriver;
     9 import org.openqa.selenium.WebElement;
    10 import org.openqa.selenium.chrome.ChromeDriver;
    11 import org.testng.Assert;
    12 import org.testng.annotations.AfterMethod;
    13 
    14 public class ChormeOpen {
    15     WebDriver driver;
    16     String url = "http://www.baidu.com";
    17     @Test
    18     public void opentest() {
    19         driver.get(url);
    20         WebElement input = driver.findElement(By.id("kw"));
    21         input.sendKeys("百度一下");
    22         //
    23         try {
    24             Thread.sleep(3000);
    25         } catch (InterruptedException e) {
    26             // TODO Auto-generated catch block
    27             e.printStackTrace();
    28         }
    29         String text = input.getAttribute("value");
    30         Assert.assertEquals(text, "百度一下");
    31     }
    32     
    33   @BeforeMethod
    34   public void beforeMethod() {
    35       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    36         driver = new ChromeDriver();
    37   }
    38 
    39   @AfterMethod
    40   public void afterMethod() {
    41       driver.quit();
    42   }
    43 
    44 }
    View Code

    二十五、获取页面元素的CSS属性值

    被测试网页的网址:

    http://www.baidu.com

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import org.openqa.selenium.By;
     8 import org.openqa.selenium.WebDriver;
     9 import org.openqa.selenium.WebElement;
    10 import org.openqa.selenium.chrome.ChromeDriver;
    11 import org.testng.Assert;
    12 import org.testng.annotations.AfterMethod;
    13 
    14 public class ChormeOpen {
    15     WebDriver driver;
    16     String url = "http://www.baidu.com";
    17     @Test
    18     public void opentest() {
    19         driver.get(url);
    20         WebElement input = driver.findElement(By.id("kw"));
    21         String inputWidth = input.getCssValue("width");
    22         System.out.println(inputWidth);
    23         try {
    24             Thread.sleep(3000);
    25         } catch (InterruptedException e) {
    26             // TODO Auto-generated catch block
    27             e.printStackTrace();
    28         }
    29     }
    30     
    31   @BeforeMethod
    32   public void beforeMethod() {
    33       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    34         driver = new ChromeDriver();
    35   }
    36 
    37   @AfterMethod
    38   public void afterMethod() {
    39       driver.quit();
    40   }
    41 
    42 }
    View Code

    二十六、隐匿等待

    被测试网页的网址:

    http://www.baidu.com

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import java.util.concurrent.TimeUnit;
     8 
     9 import org.openqa.selenium.By;
    10 import org.openqa.selenium.NoSuchElementException;
    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     String url = "http://www.baidu.com";
    20     @Test
    21     public void opentest() {
    22         driver.get(url);
    23         //隐式等待
    24         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    25         try {
    26             WebElement input = driver.findElement(By.id("kw"));
    27             WebElement button = driver.findElement(By.id("su"));
    28             input.sendKeys("三生三世");
    29             button.click();
    30         } catch (NoSuchElementException e) {
    31             // TODO: handle exception
    32             Assert.fail("没有找到元素");
    33             e.printStackTrace();
    34         }
    35         try {
    36             Thread.sleep(3000);
    37         } catch (InterruptedException e) {
    38             // TODO Auto-generated catch block
    39             e.printStackTrace();
    40         }
    41     }
    42     
    43   @BeforeMethod
    44   public void beforeMethod() {
    45       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    46         driver = new ChromeDriver();
    47   }
    48 
    49   @AfterMethod
    50   public void afterMethod() {
    51       driver.quit();
    52   }
    53 
    54 }
    View Code

    二十七、常用的显式等待

    显式等待比隐式等待更节约测试脚本执行的时间,推荐尽量使用显式等待方式来判断页面元素是否存在。使用ExpectedConditions类中自带的方法,可以进行显式等待的判断。显式等待可以自定义等待的条件,用于更加复杂的页面元素状态判断。常用的显式等待条件如下表所示:

    等待的条件 WebDriver方法
    页面元素是否在页面上可用(enabled) elementToBeClickable(By locator)
    页面元素处于被选中状态 elementToBeSelected(WebElement element)
    页面元素在页面中存在 presenceOfElementLocated(By locator)
    在页面元素中是否包含特定的文本 textToBePresentInElement(By locator)
    页面元素值 textToBePresentInElementValue(By locator,java.lang.String text)
    标题(title) titleContains(java.lang.String title)

    只有满足显式等待的条件要求,测试代码才会继续向后执行后续的测试逻辑。当显式等待条件未被满足的时候,在设定的最大显式等待时间阈值内,会停在当前代码位置进行等待,直到设定的等待条件被满足,才能继续执行后续的测试逻辑。如果超过设定的最大显式等待时间阈值,则测试程序会抛出异常,测试用例被认为执行失败。

    被测试网页的HTML源码:

     1 <html>
     2 <head>
     3 <meta charset="UTF-8" content="text/html">
     4 <title>你喜欢的水果</title>
     5 </head>
     6 <body>
     7     <p>请选择你爱吃的水果</p>
     8     <br>
     9     <select name="fruit">
    10         <option id="peach" value="taozi">桃子</option>
    11         <option id="watermelon" value="xigua">西瓜</option>
    12     </select>
    13     <br>
    14     <input type="checkbox">是否喜欢吃水果?</input>
    15     <br><br>
    16     <input type="text" id="text" value="今年夏天西瓜相当甜!">文本框</input>
    17 </body>
    18 </html>
    View Code

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 import java.io.File;
     7 
     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.openqa.selenium.support.ui.ExpectedConditions;
    13 import org.openqa.selenium.support.ui.WebDriverWait;
    14 import org.testng.annotations.AfterMethod;
    15 
    16 public class ChormeOpen {
    17     WebDriver driver;
    18     @Test
    19     public void opentest() {
    20         File file = new File("");
    21         String url = file.getAbsolutePath() + "/html/" + "file11.html";
    22         driver.get(url);
    23         WebDriverWait wait = new WebDriverWait(driver, 10);
    24         wait.until(ExpectedConditions.titleContains("水果"));//
    25         
    26         //
    27         WebElement select = driver.findElement(By.xpath("//option[@id='peach']"));
    28         wait.until(ExpectedConditions.elementToBeSelected(select));
    29         
    30         //
    31         wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@type='checkbox']")));
    32         
    33         //
    34         WebElement p = driver.findElement(By.xpath("//p"));
    35         wait.until(ExpectedConditions.textToBePresentInElement(p, "爱吃的水果"));
    36         
    37         try {
    38             Thread.sleep(3000);
    39         } catch (InterruptedException 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

    二十八、自定义显式等待

    被测试网页的HTML源码:

     1 <html>
     2 <head>
     3 <meta charset="UTF-8" content="text/html">
     4 <title>你喜欢的水果</title>
     5 </head>
     6 <body>
     7     <p>请选择你爱吃的水果</p>
     8     <br>
     9     <select name="fruit">
    10         <option id="peach" value="taozi">桃子</option>
    11         <option id="watermelon" value="xigua">西瓜</option>
    12     </select>
    13     <br>
    14     <input type="checkbox">是否喜欢吃水果?</input>
    15     <br><br>
    16     <input type="text" id="text" value="今年夏天西瓜相当甜!">文本框</input>
    17 </body>
    18 </html>
    View Code

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 import java.io.File;
     7 
     8 import org.openqa.selenium.By;
     9 import org.openqa.selenium.NoSuchElementException;
    10 import org.openqa.selenium.WebDriver;
    11 import org.openqa.selenium.WebElement;
    12 import org.openqa.selenium.chrome.ChromeDriver;
    13 import org.openqa.selenium.support.ui.ExpectedCondition;
    14 import org.openqa.selenium.support.ui.WebDriverWait;
    15 import org.testng.Assert;
    16 import org.testng.annotations.AfterMethod;
    17 
    18 public class ChormeOpen {
    19     WebDriver driver;
    20     @Test
    21     public void opentest() {
    22         File file = new File("");
    23         String url = file.getAbsolutePath() + "/html/" + "file11.html";
    24         driver.get(url);
    25         try {
    26             WebDriverWait wait = new WebDriverWait(driver, 10);
    27             WebElement textInputbox = wait.until(new ExpectedCondition<WebElement>() {
    28 
    29                 @Override
    30                 public WebElement apply(WebDriver d) {
    31                     // TODO Auto-generated method stub
    32                     return d.findElement(By.xpath("//*[@type='text']"));
    33                 }
    34             });
    35             Assert.assertEquals("今年夏天西瓜相当甜!", textInputbox.getAttribute("value"));
    36             
    37             //
    38             Boolean containTextFlag = wait.until(new ExpectedCondition<Boolean>() {
    39 
    40                 @Override
    41                 public Boolean apply(WebDriver d) {
    42                     // TODO Auto-generated method stub
    43                     return d.findElement(By.xpath("//p")).getText().contains("爱吃");
    44                 }
    45             });
    46             Assert.assertTrue(containTextFlag);
    47             
    48             //
    49             Boolean inputTextVisibleFlag = wait.until(new ExpectedCondition<Boolean>() {
    50 
    51                 @Override
    52                 public Boolean apply(WebDriver d) {
    53                     // TODO Auto-generated method stub
    54                     return d.findElement(By.xpath("//*[@type='text']")).isDisplayed();
    55                 }
    56             });
    57             Assert.assertTrue(inputTextVisibleFlag);
    58         } catch (NoSuchElementException e) {
    59             // TODO: handle exception
    60         }
    61         
    62         try {
    63             Thread.sleep(3000);
    64         } catch (InterruptedException e) {
    65             // TODO Auto-generated catch block
    66             e.printStackTrace();
    67         }
    68     }
    69     
    70   @BeforeMethod
    71   public void beforeMethod() {
    72       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    73         driver = new ChromeDriver();
    74   }
    75 
    76   @AfterMethod
    77   public void afterMethod() {
    78       driver.quit();
    79   }
    80 
    81 }
    View Code

    二十九、判断页面元素是否存在

    被测试网页的网址:

    http://www.sogou.com

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

     1 package test;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 import org.testng.annotations.BeforeMethod;
     6 
     7 import org.openqa.selenium.By;
     8 import org.openqa.selenium.NoSuchElementException;
     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     String url = "http://www.sogou.com";
    18     
    19     private Boolean IsElementPresent(By by){
    20         try {
    21             driver.findElement(by);
    22             return true;
    23         } catch (NoSuchElementException e) {
    24             // TODO: handle exception
    25             return false;
    26         }
    27     }
    28     @Test
    29     public void opentest() {
    30         driver.get(url);
    31         if(IsElementPresent(By.id("query"))){
    32             WebElement searchInputbox = driver.findElement(By.id("query"));
    33             if(searchInputbox.isEnabled()==true){
    34                 searchInputbox.sendKeys("sogou找到了");
    35             }
    36         }else{
    37             Assert.fail("元素未被找到");
    38         }
    39         try {
    40             Thread.sleep(3000);
    41         } catch (InterruptedException e) {
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         }
    45     }
    46     
    47   @BeforeMethod
    48   public void beforeMethod() {
    49       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    50         driver = new ChromeDriver();
    51   }
    52 
    53   @AfterMethod
    54   public void afterMethod() {
    55       driver.quit();
    56   }
    57 
    58 }
    View Code

    三十、使用Title属性识别和操作新弹出的浏览器窗口

    被测试网页的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 
     9 import org.openqa.selenium.By;
    10 import org.openqa.selenium.NoSuchWindowException;
    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/" + "file12.html";
    24         driver.get(url);
    25         String parentWindowHandle = driver.getWindowHandle();
    26         WebElement sogouLink = driver.findElement(By.xpath("//a"));
    27         sogouLink.click();
    28         java.util.Set<String> allWindowsHandles = driver.getWindowHandles();
    29         if(!allWindowsHandles.isEmpty()){
    30             for(String windowHandle:allWindowsHandles){
    31                 try {
    32                     if(driver.switchTo().window(windowHandle).getTitle().equals("搜狗搜索引擎 - 上网从搜狗开始")){
    33                         driver.findElement(By.id("query")).sendKeys("sogou");
    34                     }
    35                 } catch (NoSuchWindowException e) {
    36                     // TODO: handle exception
    37                     e.printStackTrace();
    38                 }
    39             }
    40         }
    41         driver.switchTo().window(parentWindowHandle);
    42         Assert.assertEquals(driver.getTitle(), "你喜欢的水果");
    43         try {
    44             Thread.sleep(3000);
    45         } catch (InterruptedException e) {
    46             // TODO Auto-generated catch block
    47             e.printStackTrace();
    48         }
    49     }
    50     
    51   @BeforeMethod
    52   public void beforeMethod() {
    53       System.setProperty("webdriver.chrome.driver", "F:\selenium\chromedriver.exe");
    54         driver = new ChromeDriver();
    55   }
    56 
    57   @AfterMethod
    58   public void afterMethod() {
    59       driver.quit();
    60   }
    61 
    62 }
    View Code
  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/successcai/p/6662258.html
Copyright © 2011-2022 走看看