Selenium基本用法以及元素定位

1、Selenium 简介   Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试。函数很是灵活,可以完成界面元素定位、窗口跳转、结果比较。他支持IE、Firefox、Safari、Chrome、Android手机浏览器,也支持Java、C#、Python、Ruby、PHP等语言,支持如Windows、Linux、IOS、Android等操做系统,是一套为web自动化测试量身定制的web框架, Selenium框架由多个工具组成,包括:Selenium IDE,Selenium RC,Selenium WebDriver和SeleniumRC,至于他们的功能和做用请你们自行百度脑补,下面将重点介绍selenium主要功能WebDriver。
2、selenium基本功能   一、浏览器并打开指定网页
  WebDriver driver = newChromeDriver();//初始化Google浏览器对象
  WebDriver driver = newFirefoxDriver();//初始化火狐浏览器
  WebDriver driver = new InternetExplorerDriver();//初始化IE浏览器
  driver.get(“www.baidu.com”)//打开百度页面
  driver.close();//关闭当前页面
  driver.quit();//关闭由selenium所启动的全部页面
  备注:有些浏览器好比火狐并无安装在默认路径,那么须要指定浏览器路径:System.setProperty("webdriver.firefox.bin","D:\Program Files\Mozilla Firefox\firefox.exe");
  二、浏览器操做  
  driver.navigate().back();//返回或向前
  driver.navigate().forward();//向后
  driver.navigate().refresh();//刷新
  driver.manage().window().maxsize();//最大画窗口 
  String title = driver.getTitle(); //返回当前页面的Ttile
  String currentUrl = driver.getCurrentUrl(); //返回当前页面的url
  getPageSource() //返回当前页面的源码
  getWindowHandle() //返回当前的浏览器的窗口句柄
  getWindowHandles() //返回当前的浏览器的全部窗口句柄
  备注:对于句柄等的介绍后续会有详细篇幅进行介绍,此处不作赘述
3、基本元素定位  a、单元素定位: 
 例子:php

  <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba sb_bs"><span id="gbqfsa">Google Search</span></button>

  一、By.id(id) //用惟一属性id来定位很是推荐使用 优先级最高
  二、By.name(name) //用name属性来定位也是很是高效的优先级仅次于id
  三、By.linkText(linkText) //即经过超文本连接上的"文字信息"来定位元素,这种方式通常专门用于定位页面上的超文本连接:通常tag为属性href=连接
  四、By.partialLinkText(linkText) //适用于连接类的元素,模糊匹配,即包含herf属性的元素 ,同BylinkText()
  五、By.className(className)) //对于元素的属性包含class的状况适用 <class = "src">
  六、By.tagName(name) //通用定位方式,适用于层级定位,好比button就是一个tag 所以通常都会找出多条记录,须要在进行定位,一般用for循环
  以上均为单元素定位,固然6通常定位的结果都是多个,其余的通常结果为1个。单元素定位的命令基本格式以下:
css

  WebElemet element = driver.findElement(By.id("imageField"));
  element.click();//点击
  element.sendKeys("String");//输入
  备注:有一个现象,就是复合类,即例子中的class="gbqfba sb_bs">,若是用driver.findElement(By.id("gbqfba sb_bs"))必定会报错,这种复合类必须用前面的或者后面的键值才能定位成功,即:driver.findElement(By.id("sb_bs"))or driver.findElement(By.id("gbqfba")),不然会报错,可是注意,若是class="gbqfba:sb_bs">这不是符合类,能够自行脑补一下css
 b、多元素定位:
  多元素定位实际上是指定位的元素返回多个结果,通常会用List集合来存储结果,用for循环和if判断语句来找到本身须要的元素,好比用tagName定位,返回的结果就会多个以下:  
  List<WebElement> allInputs = driver.findElements(By.tagName("input"));//定位tagName为input的tag元素
  for(WebElement element :allInputs){
    if(element.getAttribute("type").equals("text")){
      System.out.println(e.getText().toString()); //打印出每一个文本框里的值
    }
  }
 c、层级定位
  层级定位,顾名思义,就按照层级关系进行定位,通常是应用于没法直接定位到须要定位的元素,因此采用先定位其父元素,在定位子元素的方式,通常用于表格或下拉框定位:
  表格应用
  WebElement table = driver.findElement(By.id("table"));
  List <WebElement> rows  = table.findElement(By.id("tr"));
  下拉框应用
  WebElement select = driver.findElement(By.name("select")); //
  List<WebElement> selectvalue = a.findElements(By.tagName("option"));
  for(WebElement value : selectvalue){
    System.out.println(“value”+value.getText())
  }
 e、xpath定位
  Xpath是一个很是强大的定位方式,几乎能够定位到全部数据,可是在咱们学习Xpath定位以前,咱们要知道明确两个概念,绝对路径&相对路径,绝对路径是以“/”开始的,
  例如/body/buttononclick/input[1], 这就是绝对路径的表达形式,相反“相对路径”是以“//”开头的,好比//input[2],另外须要多说一句的是,当xpath的路径以"/"开头时,表示
  让Xpath解析引擎从文档的根节点开始解析。当xpath路径以"//"开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出如今xpath路径中时,则表示
  寻找父节点的直接子节点,当"//"出如今xpath路径中时,表示寻找父节点下任意符合条件的子节点,无论嵌套了多少层级(这些下面都有例子,你们能够参照来试验)。弄清
  这个原则,咱们就能够灵活的使用 Xpaht进行定位了,下面仍是看几个"栗子"吧  
  查找页面根元素://
  查找页面上全部的input元素://input
  查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号)://form[1]/input
  查找页面上第一个form元素内的全部子input元素(只要在form元素内的input都算,无论还嵌套了多少个其余标签,使用相对路径表示,双//号)://form[1]//input
  查找页面上第一个form元素://form[1]
  查找页面上id为loginForm的form元素://form[@id='loginForm']
  查找页面上具备name属性为username的input元素://input[@name='username']
  查找页面上id为loginForm的form元素下的第一个input元素://form[@id='loginForm']/input[1]
  查找页面具备name属性为contiune而且type属性为button的input元素://input@name='continue'
  查找页面上id为loginForm的form元素下第4个input元素://form[@id='loginForm']/input[4]
  查找页面上id是以“myid"开始/结尾关键字的元素://img[starts-with(@id,'myid')]  //img[ends-with(@id,'myid')] 
  查找页面上id属性包含'g1'关键字的元素://img[contains(@id,'g1')]
    查找页面上文本是“百度搜索”的全部元素://a[text()='百度搜索']      //a[contains(text(),"搜索")] --文本模糊定位
  查找页面上input的最有一个元素://input[last()]  函数位置定位
  a、经过路径定位
  WebElement xpath = driver.findElement(By.xpath("html/body/div/form/input"));
  WebElement xpath = driver.findElement(By.xpath("//input"))
  b、经过索引定位
  WebElement xpath = driver.findElement(By.xpath("//input[3]"));
  c、经过属性定位
  WebElement xpath = driver.findElement(By.xpath(""//*[@id='su' and @type='submit']""));
  WebElement xpath = driver.findElement(By.xpath(""//*@id='su'""));
  d、文本属性定位
  WebElement xpath = driver.findElement(By.xpath("//div[@class='qrcode-text']/p/b[text()='百度']"));
  e、模糊匹配 html

  WebElement xpath = driver.findElement(By.xpath("//input[starts-with(@id,'su')"));
  WebElement xpath = driver.findElement(By.xpath("//input[ends-with(@id,'su')"));
  WebElement xpath = driver.findElement(By.xpath("//input[contains(@id,'su')"));
  WebElement xpath = driver.findElement(By.xpath(""//*@id='su'""));
  代码实例:WebElement xpath = driver.findElement(By.xpath("//form[@id='loginForm']"))
  xpath定位就介绍这些,后续还会更新关于Cssselect、js定位、下拉框、单选/多选框、文本框、弹窗、句柄等,敬请关注
  小技巧:
  1.当页面元素有id属性时,最好尽可能用id来定位。但因为现实项目中不少程序员其实写的代码并不规范,会缺乏不少标准属性,这时就只有选择其余定位方法。
  2.xpath很强悍,但定位性能不是很好,因此仍是尽可能少用。若是确实少数元素很差定位,能够选择xpath或cssSelector。若是自动化案例中使用大量的Xpath进行定位,你会发现你的脚本执行时间很是的长,慎用。
  3.当要定位一组相同元素时,能够考虑用tagName或name。
  4.当有连接须要定位时,能够考虑linkText或partialLinkText方式。
     5.在进行定位的时候,尽可能使用相对路径定位,若是使用绝对路径,那么一但页面结构变化,则没法使用原有的定位方式,可是相对路径就特别灵活,复用性高,也是项目中特别经常使用的方式
   程序员

转载于猿2048:➮《Selenium基本用法以及元素定位》web

相关文章
相关标签/搜索