zoukankan      html  css  js  c++  java
  • Selenium 元素定位

    selenium通过driver.findElement(By selector)来定位元素,selector在selenium-java.jar中,里面的方法一共就8种,如下图:

    基本定义:

    By.id
    WebElement element = driver.findElement(By.id("passwd-id"));
    
    By.name
    WebElement element = driver.findElement(By.name("passwd"));
    
    By. path
    WebElement element = driver.findElement(By.xpath("//input[@id='passwd-id']")); 
    
    By.className
    WebElement element = driver.findElement(By.className("input_class"));
    
    By.cssSelector
    WebElement element = driver.findElement(By.cssSelector(".input_class"));
     
    By.linkText
     //通俗点就是精确查询
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.baidu.com/");
    WebElement element = driver.findElement(By.linkText("百科"));
    
    By.partialLinkText
    //这个方法就是模糊查询
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.baidu.com/"); 
    WebElement element = driver.findElement(By.partialLinkText("hao"));

     frame定位

    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"))

    下面提供了一些常见的方法:获取元素、判断元素是否存在、点击button、填写文本、等待事件

      1 import org.openqa.selenium.By;
      2 import org.openqa.selenium.NoSuchElementException;
      3 import org.openqa.selenium.WebDriver;
      4 import org.openqa.selenium.WebElement;
      5 import org.openqa.selenium.support.ui.Select;
      6 
      7 /**
      8  * @auth  Nancy
      9  * @data  2016-11-23上午11:46:14
     10  * @description 页面元素工具
     11  */
     12 public class UIUtils {
     13     
     14     public static int waitTimes = 5;
     15     
     16     
     17     
     18 //***************************getBy****************************
     19 
     20     /**
     21      * 判断页面元素是否存在
     22      * @param driver
     23      * @param selector
     24      * @return
     25      */
     26     public static boolean isElementExsit(WebDriver driver, By selector) {
     27         try {
     28             driver.findElement(selector);
     29             return true;
     30         } catch (NoSuchElementException e) {
     31             return false;
     32         }
     33     }
     34     
     35     /**
     36      * 判断元素是否存在 通过ID
     37      * @param driver
     38      * @param id
     39      * @return
     40      */
     41     public static boolean isElementExsitById(WebDriver driver,String id) {
     42         try {
     43             driver.findElement(By.id(id));
     44             return true;
     45         } catch (NoSuchElementException e) {
     46             return false;
     47         }
     48     }
     49     
     50     /**
     51      * 查找元素 通过By
     52      * @param driver
     53      * @param selector
     54      * @return
     55      */
     56     public static WebElement getElement(WebDriver driver, By selector){
     57         try {
     58             WebElement element = driver.findElement(selector);
     59             return element;
     60         } catch (NoSuchElementException e) {
     61             return null;
     62         }
     63     }
     64     
     65     /**
     66      * 查找元素 通过tagName
     67      * @param driver
     68      * @param selector
     69      * @return
     70      */
     71     public static WebElement getElementTagName(WebDriver driver, String name){
     72         try {
     73             WebElement element = driver.findElement(By.tagName(name));
     74             return element;
     75         } catch (NoSuchElementException e) {
     76             return null;
     77         }
     78     }
     79     
     80     
     81     /**
     82      * 查找元素 通过Id
     83      * @param driver
     84      * @param id
     85      * @return
     86      */
     87     public static WebElement getElementById(WebDriver driver, String id){
     88         try {
     89             WebElement element = driver.findElement(By.id(id));
     90             return element;
     91         } catch (NoSuchElementException e) {
     92             new NoSuchElementException("找不到元素");
     93             return null;
     94         }
     95     }
     96     /**
     97      * 查找元素 通过xpath
     98      * @param driver
     99      * @param id
    100      * @return
    101      */
    102     public static WebElement getElementByXpath(WebDriver driver, String xpath){
    103         try {
    104             WebElement element = driver.findElement(By.xpath(xpath));
    105             return element;
    106         } catch (NoSuchElementException e) {
    107             new NoSuchElementException("找不到元素");
    108             return null;
    109         }
    110     }
    111     
    112     /**
    113      *  查找元素 通过name
    114      * @param driver
    115      * @param name
    116      * @return
    117      */
    118     public static WebElement getElementByName(WebDriver driver, String name){
    119         try {
    120             WebElement element = driver.findElement(By.name(name));
    121             if(element!=null){
    122                 return element;
    123             }else{
    124                 new NoSuchElementException("找不到元素");
    125                 return null;
    126             }
    127         } catch (NoSuchElementException e) {
    128             new NoSuchElementException("找不到元素");
    129             return null;
    130         }
    131     }
    132     
    133     /**
    134      * 查找元素 通过超链接
    135      * @param driver
    136      * @param text
    137      * @return
    138      */
    139     public static WebElement getElementByLinkText(WebDriver driver, String text){
    140         try {
    141             WebElement element = driver.findElement(By.linkText(text));
    142             return element;
    143         } catch (NoSuchElementException e) {
    144             new NoSuchElementException(text+"元素找不到!");
    145             return null;
    146         }
    147     }
    148     
    149     /**
    150      * 查找元素 通过className
    151      * @param driver
    152      * @param text
    153      * @return
    154      */
    155     public static WebElement getElementByClassName(WebDriver driver, String className){
    156         try {
    157             WebElement element = driver.findElement(By.className(className));
    158             return element;
    159         } catch (NoSuchElementException e) {
    160             new NoSuchElementException(className+"元素找不到!");
    161             return null;
    162         }
    163     }
    164     
    165     
    166 //***************************点击button****************************
    167     /**
    168      * 点击 button 超链接
    169      * @param driver
    170      * @param text
    171      */
    172     public static void clickByLinkText(WebDriver driver, String text){
    173         WebElement element = getElementByLinkText(driver,text);
    174         element.click();
    175         wait(waitTimes);
    176     }
    177     
    178     /**
    179      * 点击 button 通过Id
    180      * @param driver
    181      * @param id
    182      */
    183     public static void clickById(WebDriver driver,String id){
    184         WebElement element = getElementById(driver, id);
    185         element.click();
    186         wait(waitTimes);
    187     }
    188     /**
    189      * 点击 button 通过Id
    190      * @param driver
    191      * @param id
    192      */
    193     public static void clickByXpath(WebDriver driver,String xpath){
    194         WebElement element = getElementByXpath(driver, xpath);
    195         element.click();
    196         wait(waitTimes);
    197     }
    198     
    199     /**
    200      * 点击 button 通过name
    201      * @param driver
    202      * @param name
    203      */
    204     public static void clickByName(WebDriver driver,String name){
    205         WebElement element = getElementByName(driver, name);
    206         element.click();
    207         wait(waitTimes);
    208     }
    209     
    210     /**
    211      * 点击 button 通过classname
    212      * @param driver
    213      * @param className
    214      */
    215     public static void clickByClassName(WebDriver driver,String className){
    216         WebElement element =getElementByClassName(driver, className);
    217         element.click();
    218         wait(waitTimes);
    219     }
    220     
    221 //***************************选择下拉框select****************************
    222     public static Select selectBy(WebDriver driver,By by){
    223         Select userSelect= new Select(getElement(driver, by));
    224         return userSelect;
    225     }
    226     
    227     /**
    228      * 获取明文为value的值
    229      * @param driver
    230      * @param by
    231      * @param value
    232      */
    233     public static void selectVisualTextBy(WebDriver driver,By by,String visibleText){
    234         Select userSelect= new Select(getElement(driver, by));
    235         userSelect.selectByVisibleText(visibleText);
    236     }
    237     
    238     public static void selectVisualTextByName(WebDriver driver,String name,String visibleText){
    239         selectVisualTextBy(driver, By.name(name), visibleText);
    240     }
    241     
    242 //***************************赋值input****************************
    243     /**
    244      * 通过id找到元素,赋值
    245      * @param driver
    246      * @param id id
    247      * @param text 需要输入的文字
    248      */
    249     public static void sendKeysById(WebDriver driver, String id,String text){
    250         WebElement element = getElementById(driver,id);
    251         element.sendKeys(text);
    252     }
    253     
    254 //***************************等待****************************
    255     /**
    256      * 等待
    257      * @param seconds
    258      */
    259     public static void waitMoment(){
    260         wait(waitTimes);
    261     }
    262     /**
    263      * 等待
    264      * @param seconds
    265      */
    266     public static void wait(int seconds){
    267         try {
    268             Thread.sleep(seconds * 1000);
    269         } catch (InterruptedException e) {
    270             e.printStackTrace();
    271         }
    272     }
    273     
    274     /**
    275      * 等待元素最多三十秒
    276      * @param driver
    277      * @param id
    278      * @return
    279      */
    280     public static boolean waitElementById(WebDriver driver,String id){
    281         boolean flag = false;
    282         int i = 1;
    283         while(!flag&i<=6){
    284             wait(waitTimes);
    285             flag = isElementExsitById(driver,id);
    286             i++;
    287         }
    288         return flag;
    289     }
    290     
    291     /**
    292      * 通过超链接等待元素
    293      * @param driver
    294      * @param text
    295      * @return
    296      */
    297     public static boolean waitElementByLinkText(WebDriver driver,String text){
    298         boolean flag = false;
    299         int i = 1;
    300         while(!flag&i<=6){
    301             wait(waitTimes);
    302             flag = isElementExsit(driver,By.linkText(text));
    303             i++;
    304         }
    305         return flag;
    306     }
    307     
  • 相关阅读:
    bootstrap-select用法详解
    启动react项目报如下错误
    什么?女朋友生气哄不好?那是你没有这款神器!
    Python竟然能做这种进度条,看完别说WC!
    看完学习Python的萌新都在问的六个问题,你就可以毕业了!
    批量加水印防抄袭,Python轻松搞定!
    hdu_1272_小希的迷宫_201403091527
    hdu_1856_More is better_201403091720
    hdu_1213_How Many Tables_201403091126
    hdu_1232_畅通工程_201403091018
  • 原文地址:https://www.cnblogs.com/applemoon/p/6126785.html
Copyright © 2011-2022 走看看