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
  • 相关阅读:
    LeetCode 152. 乘积最大子数组 | Python
    LeetCode 31. 下一个排列 | Python
    LeetCode 136. 只出现一次的数字 | Python
    LeetCode 102. 二叉树的层序遍历 | Python
    LeetCode 155. 最小栈 | Python
    LeetCode 69. x 的平方根 | Python
    Python3 高阶函数
    Python3 装饰器
    Python3 递归函数
    Python3 函数
  • 原文地址:https://www.cnblogs.com/successcai/p/6662258.html
Copyright © 2011-2022 走看看