zoukankan      html  css  js  c++  java
  • selenium webdriver

    关于selenium的好的学习资料:

    1. 官方User Guide:   http://seleniumhq.org/docs/
    2. 官方API:        http://selenium.googlecode.com/git/docs/api/java/index.html
    3. 中文API:              http://download.csdn.net/detail/testingba/3811354
    4. 虫师博客:         http://www.cnblogs.com/fnng/category/349036.html
    5. github:         https://github.com/SeleniumHQ/selenium/
    6. selenium github docs: http://seleniumhq.github.io/selenium/docs/api/py/
    7. 乙醇的各种语言的selenium  https://github.com/easonhan007/webdriver_guide/blob/master/README.md
    8. 易百的webdriver:  http://www.yiibai.com/selenium/selenium_webdriver.html

    python版本2.7,selenium版本2.53.6,火狐版本

    一个采用selenium webdirver+unittest +python,或 selenium webdirver+junit4/testNG+java,另外一个是采用 robot+selenium2library 

    Selenium 是web自动化测试工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等。

    Selenium IDE 是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。

    Selenium Grid 是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。

    RC和WebDriver 更多应该把它看成一套规范,在这套规范里定义客户端脚步与浏览器交互的协议。以及元素定位与操作的接口。

     WebDriver可以理解成是一层基础的协议规范,假如说:Webdriver API(接口规范)说,我们要提供一个页面元素id的定位方法。

    Ruby的webdriver模块是这么实现的:

    require "selenium-webdriver"

    find_element(:id, "xx")

    python的webdriver模块是这么实现的:

    from selenium import webdriver

    find_element_by_id("xx")

    Java的webdriver模块是这么实现的:

    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;

    findElement(By.id("xx"))

    Robot Framework + selenium是这么实现的:

    因为Robot Framework 对于底层过于封装,所以,我们看不到语言层面的方法定义。所以,Robot Framework 提供给我们的方法如下:

    1、导入Robot Framework 版本的selenium(webdriver)

    2、使用id方法

     

    webdriver不能组织和执行用例,把写好的操作页面元素的方法组织起来并实现测试结果,是由编程语言的单元测试框架去完成的,如

    java 的junit和testng单元测试框架,python 的unittest单元测试框架等

     selenium2常用API介绍

    点击操作

    WebElement button=driver.findElement(By.id("login"));

    button.click();

     
    清除操作

    WebElement username=driver.findElement(By.id("username_input"));

    username.clear();

     
    获取元素属性的值

    <input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">
    上面代码是用户名输入框的源码,我们要获取这个“用户名”三个字就需要用到:

    WebElement WebElement username=driver.findElement(By.id("u"));

    u.getAttribute(“placeholder”);

    这样就能获取到“用户名”这三个字了。

     
    获取元素的文本

    <button class="btn btn-major" id="loginBtn" type="button">登录</button>

    WebElement中提供一个getText()方法可以获取,代码如下:
    WebElement login= driver.findElement(By.id(“loginBtn”));
    login.getText();

     
    判断元素是否显示 方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false。
    WebElement login= driver.findElement(By.id(“loginBtn”));
    login.isDisplayed();
     
    元素是否被选择

    有这样的情况,复选框或者是单选框,我们需要判断这个框是不是被勾选了。

    如果勾选了,返回true,如果没有勾选返回false。

    WebElement checkbox= driver.findElement(By.id(“checkbox_id”));
    checkbox.isSeelected();

     
    元素是否被启用

    有些按钮,可能在页面显示上被灰掉,就是不让点击,这个时候这个按钮是不可用的。

    那么我们如何判断这个按钮是否能被点击呢?请用isEnabled()方法,如果可用返回true,如果不可用返回false。

    WebElement login= driver.findElement(By.id(“loginBtn”));
    login. isEnabled ();

     
    提交操作

    在有表单的界面上,可以不通过点击按钮进行提交操作,这就需要用到submit()方法

    比如一个元素的源码:
    <button class="btn btn-major" id="loginBtn" type="submit">登录</button>
    此源码需要在一个表单(Form)中,并且type需要时submit类型,此时我们的代码可以这样写:
    WebElement login= driver.findElement(By.id(“loginBtn”));
    login. submit();

     
    iframe

    有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。

    页面源代码为:

    <td>Iframe</td>
      <td class="widgetStyle">
      <iframe width=800 height=330 name=aa frameborder=0 src="./demo1.html"></iframe>
    </td>


    driver.switchTo().frame(“aa”); //传入的是iframe的Name

    1.如果iframe标签有能够唯一确定的id或者name,就可以直接用id或者name的值:driver.switchTo().frame("aa"); 
    2.如果iframe标签没有id或者name,但是我能够通过页面上确定其是第几个(也就是通过index来定位iframe,index是从0开始的):driver.switchTo().frame(0); 
    3.也可以通过xpath的方式来定位iframe,写法如下: 
          ①WebElement iframe = driver.findElement(By.xpath("//iframe[@name='aa']")); 
          ②driver.switchTo().frame(iframe);

    如果要返回到以前的默认content,可以使用:
    dr.switchTo().defaultContent();

     
    操作下拉选择框

    思路是:先定位出你要处理的下拉框(元素),然后将此元素传入Select对象中,接着用Select中的相关方法来选取下拉值

    我们先要定位这个Select下拉框(元素)
    WebElement element_province = driver.findElement(By.id(“province”));
    然后把element传入Select
    Select province = new Select(element_province);

    然后由Select来操作下拉框
    province.selectByIndex(0) //根据所选值的位置来选择下拉框值,从0开始
    province.selectByValue(“18”) //根据value值来选择下拉框的值,比如这里的18,选择的就是海南
    province .selectByVisibleText(“北京”)//这个是根据可见文本来操作下拉菜单,比如你选的北京,那么就会找到北京作为下拉框的值。

     
    处理弹出来的对话框

    Alert  a =  driver.switchTo().alert();此方法可以获取当前页面弹出的alert。

    获取alert文本方法:a.getText();
    模拟点击确定按钮:a.accept();
    模拟点击取消按钮:a.dismiss();

     
    处理浏览器弹出的新窗口

    既然是新窗口,肯定是要先切换到新窗口,且每个窗口都有自己的句柄,唯一标识这个窗口,只要找到新窗口的句柄,问题就迎刃而解。

    首先获得当前句柄,以便后边跳回:
    String current_handles = driver. getWindowHandle();
    出现新窗口之后,获取所有窗口句柄
    Set<String> all_handles = driver.getWindowHandles();
    循环判断,把当前句柄从所有句柄中移除,剩下的就是你想要的新窗口
    Iterator<String> it = all_handles.iterator();
    while(it.hasNext()){

    if(current_handles == it.next()) continue;
    //跳入新窗口
    WebDriver window = dr.switchTo().window(it.next());
    }
    最后就可以在新窗口的页面进行相关操作了,在新窗口操作的时候使用新driver进行页面操作,新driver是window。
    如果想回到最开始的窗口请使用:
    driver.switchTo().window(current_handles);

     
    执行JS脚本

    有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。
    方法一:
    声明js脚本
    String js =” alert("hello,this is a alert!")”;
    执行js脚本

    ((JavascriptExecutor) driver).executeScript(js);

    执行之后会在浏览器上弹出一个alert,显示内容是“hello,this is a alert!”

    方法二:
    这个方法比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。
    ((JavascriptExecutor) driver).executeScript(String js, Object args);
    此方法有两个参数,第一个是js脚本,至于js脚本你像写点击的或者输入的脚本都可以,我们这里举例为点击操作。第二个参数是:要点击的元素。
    比如我要点击百度搜索的搜索按钮,可以这样写:
    ((JavascriptExecutor) driver).executeScript(“arguments[0].click();”, driver.findElement(By.id(“su”)));

     
         
         
         
         
         
         
         

    摘自:http://www.cnblogs.com/yajing-zh/category/746391.html

     

     

    WebDriver 支持 Firefox (FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver) 和 Chrome (ChromeDriver) 由于国内禁止了http://code.google.com和http://www.seleniumhq.org/download/的软件下载,可以去csdn下载,有很多童鞋共享了软件。

    一、Firefox:
     不需要下载FirefoxDriver,直接编写代码即可
       from selenium import webdriver
       browser = webdriver.Firefox()
       browser.get('https://www.baidu.com/')

    二、IE:
       1、下载IEDriverServer.exe(机器安装IE浏览器)

       2、将IEDriverServer.exe放在python的安装目录C:Python27(装python环境时,已经将C:Python27添加到系统环境变量Path下面了)或者放到IE的安装目录下,并将该   目录添加到系统环境变量Path下面;
      如何不添加环境变量,也可以在代码里这样写:

       from selenium import webdriver

       import os

       Iedriver = "C:Program FilesInternet ExplorerIEDriverServer.exe"

       os.environ["webdriver.chrome.driver"] = Iedriver

       browser = webdriver.Chrome(Iedriver )

       browser.get('https://www.baidu.com/')

    三、Chrome:
       1、下载ChromeDriver.exe
       2、将ChromeDriver.exe放在python的安装目录C:Python27(装python环境时,已经将C:Python27添加到系统环境变量Path下面了)或者放到chrome的安装目录下,并将   该目录添加到系统环境变量Path下面;
      如何不添加环境变量,也可以在代码里这样写:

       from selenium import webdriver

       import os

       chromedriver = "C:Program Files (x86)GoogleChromeApplicationchromedriver.exe"

       os.environ["webdriver.chrome.driver"] = chromedriver

       browser = webdriver.Chrome(chromedriver)

       browser.get('https://www.baidu.com/')

  • 相关阅读:
    Solr7.x学习(4)-导入数据
    Solr7.x学习(3)-创建core并使用分词器
    Solr7.x学习(2)-设置开机启动
    Solr7.x学习(1)-安装
    Java一个对象占用多少字节
    JConsole远程配置
    Docker方式安装SonarQube
    搭建Docker私有仓库
    委托
    MVC和WebApi中设置Area中的页为首页
  • 原文地址:https://www.cnblogs.com/zz27zz/p/7337856.html
Copyright © 2011-2022 走看看