• selenium webdriver


    ie11之F12 开发者调试工具

    https://www.cnblogs.com/Ribbon/p/4549767.html

    自动化webdriver测试工具入门简介

    http://www.51testing.com/zhuanti/webdriver.htm

    http://www.51testing.com/zhuanti/selenium.html

    Selenium WebDriver高级用法

    掌握selenium初级用法后,来继续深入学习

      选择合适的WebDrvier
      WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier、FirefoxDriver、InternetExplorerDriver、ChromeDriver、OperaDriver,除了 InternetExplorerDriver只能在Windows平台运行,其他WebDriver均能跨平台。
      如果追求运行速度,HtmlUnitDriver是首选,但是它没有运行界面,不能实时看到运行效果。如果想看到运行效果,可以使用FirefoxDrvier,它会真正打开浏览器,在屏幕上运行,因此我们可以监测页面元素的位置、CSS的值等,但是代价就是速度慢。
      这里为了简单,使用 HtmlUnitDriver.
      <code>WebDriver  driver = new HtmlUnitDriver();</code>
      导航
      有了WebDriver实例,第一件事情就是打开页面。一般的做法是调用get方法:
      <code>driver.get("http://www.yeetrack.com");</code>
      WebDriver会一直等待,直到页面加载完毕(也就是”onload”方法释放)。
      和页面进行交互
      仅仅打开页面还不够,我们需要的是在页面上进行操作,进一步讲就是要操作页面中的html元素,如:
      <code><input type="text" name="passwd" id="passwd-id" /></code>
      要操作页面元素,首先要定位元素,可以通过多种方法定位,如下:
      <code>WebElement element;
      element = driver.findElement(By.id("passwd-id"));
      element = driver.findElement(By.name("passwd"));
      element = driver.findElement(By.xpath("//input[@id='passwd-id']"));</code>
      定位元素时,有两点要注意。通过text的值来定位一个Link时,text必须精确匹配;通过xpath来定位元素时,如果匹配到多条,只会返回第一条结果,如果没有匹配到,会抛NoSuchElementException异常。
      WebDriver拥有”Object-baseed” API,我们可以使用WebElement来表示所有的页面元素。WebElement类有很多操作元素的方法,但是有些方法可能对当前元素无效,不用担 心,WebDriver会尽力帮我们处理。如,对一个”meta”标签元素,我们调用了WebElement的”SetSelected()”方 法,WebDriver会抛出异常。
      我们定位到一个Element,接下来,我们可能要进行一些操作,如想键入一些字符:
      <code>element.sendKeys("sone text");</code>
      当然,我们也可以通过”Keys”这个类,来模拟键盘输入:
      <code>element.sendKeys(" and some", Keys.ARROW_DOWN);</code>
      记住,我们向这些元素输入的字符串,它们不会自动清空,也就是说调用”sendKeys()”方法,就是向元素中追加字符串。如果要清空一个input标签或者textarea:
      <code>element.clear();</code>
      填写表单
      已经知道了如何键入字符串,那么其他元素呢?如checkboxes,如何选中;”OPTION”标签,如何设置”setSelected()”。下面是处理Select标签的例子:
    <code>WebElement select = driver.findElement(By.xpath("//select"));
    List<WebElement> allOptions = select.findElements(By.tagName("option"));
    for(WebElement option : allOptions)
    {
    System.out.println(String.format("Value is " %s, option.getAttribute("value")));
    option.click();
    }</code>
      上面的代码,首先定位一个Select元素,然后获取它下面的所有option,并且打印出来,执行一个click操作。明显,如果想选中某个选 中,这种方法不是最佳选择。其实WebDrvier定义了Select类,它提供一些更快捷的方式, 如”selectByIndex()”、”selectByValue()”。
      表单填写完毕,然后就是提交,我们可以通过点击提交按钮,进行提交。
      <code>driver.findElement(By.id("submit")).click();</code>
      或者,WebElement提供”submit()”这个方法,如果当前元素处在form表单中,调用该元素的submit方法,WebDriver就会自动提交这个表单;如果不处于form表单中,会抛出”NoSuchElementException”异常。
      <code>element.submit();</code>
            拖放
      WebDriver允许我们拖放元素,如将某个元素拖到其他地方、或者将某个元素拖到其他元素上。
      <code>WebElement element = driver.findElement(By.name("source"));
      WebElement element = driver.findElement(By.name("target"));
      (new Actions(driver)).dragAndDrop(element, target).perform();</code>
      切换window或者Frame
      对于现在的web应用程序来说,很少有单个window的情况,都是嵌入了其他的frame。WebDrvier支持使用”switchTO”方法切换到其他window。
      <code>driver.switchTo().window.("windowName");</code>
      上面的代码执行后,driver就会切换到windowName这个window。但是如何获取windowName呢?来一个例子:
      <code><a href="http://www.yeetrack.com" target="windowName">点击打开新窗口</a></code>
      还有,我们可以通过”window handle”来切换,并且还可以遍历当前所有的window
      <code>for(String handle : driver.getWindowHandles())
      {
      driver.switchTo().window(handle);
      }</code>
      切换frame(或者iframe)
      <code>driver.switchTo().frame("frameName");</code>
      switchTo()可以链式调用,或者通过index来切换
      <code>drvier.switchTo().frame("frameName")
      .switchTo().frame(0)
      .switchTo().frame("child");</code>
      上面的语句执行后,driver会进入”frameName”这个frame,然后进入到第一个子frame,然后再进入到这个子frame的名称是”child”的frame中。如果要回到顶级的frame,执行下面的代码:
      <code>driver.switchTo().defaultContent();</code>
      导航:History和Location
      早先,我们使用WebDriver的get方法,打开了”http://www.yeetrack.com”。WebDriver提供一些接口,其中一个如下:
      <code>driver.navigate().to("http://www.yeetrack.com");</code>
      “navigate().to()”和”get()”方法,实现的功能完全一样,只不过”get()”拼写起来更简单。
      “navigete”接口,还可以控制浏览器的前进和后退:
      <code>driver.navigate().forward();
      driver.navigate().back();</code>
      请注意,这个功能完全依赖于底层的浏览器。如果两种浏览器的行为不一致,那么代码执行的效果也会不一致。
      Cookies
      浏览器的安全测试,cookie是不能跨域的,所以你想操作A域名的cookie,首先你要让切换到A域名上。
          
    <code>//打开域名
    driver.get("http:/
    /www.yeetrack.com");
    //添加Cookie
    Cookie cookie = new Cookie("uuid", "abcdedfjeiajfei");
    driver.manage().addCookie(cookie);
    //遍历当前域名的cookie
    Set(Cookie) allCookies = driver.manage().getCookies();
    for(Cookie loadedCookie : allCookies)
    {
    System.out.println(String.format("%s ---> %s", loadedCookie.getName(), loadedCookie.getValue()));
    }</code>

    IDEA+Java:Selenium+Maven+TestNG基本WebUI自动化测试环境搭建

    http://www.cnblogs.com/iceb/p/7111878.html

    IntelliJ IDEA 15 创建maven项目

    https://www.cnblogs.com/wql025/p/5215570.html

    webdriver常用断言

    webdriver的断言使用

    操作(action)、辅助(accessors)和断言(assertion):

    操作action:

    如点击链接,选择选项的方式进行工作。如果一个动作执行失败,或是有错误,当前的测试将会停止执行。

    操作中常见命令有:open(打开页面)

    clickAndWait(点击并等待)

    select(选择下拉菜单)

    pause(等待指定时间,以毫秒为单位,即要睡眠的时间)

    setTimeout(指定等待动作完成的等待时间。默认为30秒。

    goBack(模拟用户点击其浏览器上的“back”按钮)

    click与clickAndWait的区别:

    Comand       Target

    clickAndWait   css=input[type=submiit]           //句二

    $this->click(“css=input[type=submit]“);         //此句对应上面的 句一

    $this->waitForPageToLoad(“30000″);

    Andwait这个后缀,告诉我们,该命令将使浏览器向服务器产生一个请求,使Selenium等待加载一个新的页面。

    辅助accessors:

    如:storeElementPresent(locator,variableName)

    即将locator定位到的状态存储到variableName变量中。

    可同断言一同使用。

    断言assertion:

    常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选。

    断言被用于三种模式: assert 、verify、waitfor

    Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上。

    如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超时时间。 一般跟setTimeout时间一起用

    断言常用的有

    assertTitle(检查当前页面的title是否正确)、

    assertSelected(检查select的下拉菜单中选中是否正确)、

    assertText(检查指定元素的文本)、

    assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、

    assertTable(检查table里的某个cell中的值)、

    assertNotEditable(检查指定的input是否不可以编辑)、

    waitForElementPresent (等待检验某元素的存在。为真时,则执行。)

    idea快捷键

    http://gitlab.thunisoft.com/rdcdev1/FY_PRD_dianzijuanzong/wikis/idea快捷键

    Alt+回车
    导入包,自动修正

    Ctrl+N
    查找类

    Ctrl+Shift+N
    查找文件

    Ctrl+Alt+L
    格式化代码

    Ctrl+Alt+O
    优化导入的类和包


    Alt+Insert

    Ctrl+E或者Alt+Shift+C
    最近更改的代码


    Ctrl+R
    替换文本


    Ctrl+F
    查找文本


    Ctrl+Shift+Space
    自动补全代码


    Ctrl+空格
    代码提示


    Ctrl+Alt+Space
    类名或接口名提示


    Ctrl+P
    方法参数提示


    Ctrl+Shift+Alt+N
    查找类中的方法或变量


    Alt+Shift+C
    对比最近修改的代码


    Shift+F6
    重构-重命名


    Ctrl+Shift+先上键

    Ctrl+X
    删除行


    Ctrl+D
    复制行


    Ctrl+/或Ctrl+Shift+/
    注释(//或者/.../)


    Ctrl+J
    自动代码


    Ctrl+E
    最近打开的文件


    Ctrl+H
    显示类结构图


    Ctrl+Q
    显示注释文档


    Alt+F1
    查找代码所在位置


    Alt+1
    快速打开或隐藏工程面板


    Ctrl+Alt+left/right
    返回至上次浏览的位置


    Alt+left/right
    切换代码视图


    Alt+Up/Down
    在方法间快速移动定位


    Ctrl+Shift+Up/Down
    代码向上/下移动。


    F2或Shift+F2
    高亮错误或警告快速定位


    代码标签输入完成后,按Tab,生成代码。

    Ctrl+Shift+F7
    高亮显示所有该文本,按Esc高亮消失。


    Ctrl+W
    选中代码,连续按会有其他效果


    选中文本,按Alt+F3
    逐个往下查找相同文本,并高亮显示。


    Ctrl+Up/Down
    光标跳转到第一行或最后一行下


    Ctrl+B
    快速打开光标处的类或方法

    Selenium+Webdriver完整解决方案

      一、等待处理

      1.全局等待
      /*全局设置,当元素识别不到的时候,可以接受的最长等待时间。*/
      driver.manage()timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      /*全局设置,页面加载的最长等待时间。*/
      driver.manage()timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
      /*全局设置,关于JavaScript代码的异步处理的超时时间。AJAX请求。*/
      driver.manage()timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
      2.元素等待
    public void waitForElement(By by) throws Exception{
    for(int second = 1; second <= 30; second++){
    try{
    driver.findElement(by);
    break;
    }catch(Exception e){
    System.out.println(e.getLocalizedMessage());
    }
    Thread.sleep(1000);
    }
    }
    this.waitForElement(By.id("username"));//调用方法
      系统自带的方法:
      WebElement btnLogin = new WebDriverWait(driver, 10).until(
      ExpectedConditions.presenceOfElementLocated(By.id("login")));
      btnLogin.click();
      二、断言
      1.判断页面元素是否存在
    public boolean waitForElement(By by) throws Exception{
    boolean isExsit = false;
    for(int second = 1; second <= 30; second++){
    try{
    driver.findElement(by);
    isExist = true;
    break;
    }catch(Exception e){
    System.out.println(e.getLocalizedMessage());
    }
    Thread.sleep(1000);
    }
    return isExist;
    }
    if(this.waitForElement(By.id("username"))){
    }else{
    }
      2.判断页面上的元素的值/内容
      String result = driver.findElement(By.id("msg")).getText();
      //对于内容的判断:
      //1.严格匹配:result.equals("")
      //2.模糊匹配:result.startsWith(""),result.endsWith, result.contains
      //3.正则表达式:result.matches("正则表达式 No=.*")
      if(result.contains("aaa")){
      }else{
      }
      3.直接读取数据库的内容
      String sql = "SELECT ID FROM USERNAME ORDER BY ID "
      int maxId =  thisgetMaxId(sql);
      int postEqual = result.indexOf("=");//取=号在字符串中的位置
      String newId= result.subString(postEqual + 1 );//从=号开始截取到最后,+1后移一位
      if(maxId == Integer.parseInt(newId)){
      }else{
      }
      三、新窗口处理
      1.对话框确认框的操作
      Alert alert = driver.switchTo().alert();
      alert.accept();  //点击确定
      alert.dismiss();  //点击取消
      2.新窗口的操作
    //windowID切换
    String loginID = driver.getWindowHandle();
    for(String windowID : driver.getWindowHandles()){
    if (!windowID.equals(loginID))
    driver.switchTo.().window(windowID);
    }
    //windowTitle切换
    for(String windowID : driver.getWindowHandles()){
    driver.switchTo.().window(windowID);
    Sring windowTitle =  driver.getTitle();
    if(windowTitle.contains("部分标题")){
    break;
    }
    }
      3.弹出窗口和Iframe
      driver.switchTo().frame("frameId");//切换到frame页面
      driver.switchTo().window("windowhandle");//切换回到主页面
      四、鼠标操作事件
    private Actions action;
    //单击-click
    public void click(){
    action.moveToElement(drvier.findElement(By.linkText("login"))).perform();
    action.click().perform(); //action的调用后面一定要加上perform,才能保证能真正的运行。
    }
    //双击-
    public void doubleClick(){
    action.doubleClick(drvier.findElement(By.linkText("login"))).perform();
    }
    //右键-
    public void rightClick(){
    action.contextClick(drvier.findElement(By.linkText("login"))).perform();
    }
    //悬停-
    public void mouseHold(){
    action.clickAndHold(drvier.findElement(By.linkText("login"))).perform();
    }
    //拖拽-
    public void dragDrop(){
    WebElement source = drvier.findElement(By.linkText("login"))
    WebElement target = drvier.findElement(By.linkText("login"))
    action.dragAndDrop(source, target);
    action.dragAndDropBy(source, 200, 300);
    }
      五、键盘事件处理
      1.webDriver键盘操作-Action
      //webDriver键盘操作
      action.sendKeys("A").perform(); //按下键盘A
      action.sendKeys(Keys.Delete).perform();
      2.Java键盘操作-Robot
      //Java键盘操作
      //Java内含robot操作对象。throws Exception抛出异常给调用者。try{}catch(Excetion e){}//Excetion所有异常的父类,捕捉所有异常。
      public void robotUsage(){
      Robot robot = new Robot();
      robot.mousePress(InputEvent.BUTTON1_MASK); //鼠标左键点击
      robot.mouseRelease(InputEvent.BUTTON1_MASK); //鼠标左键释放
      robot.mousePress(keyEvent.VK_ENTER); //回车键
      robot.mouseRelease(keyEvent.VK_ENTER);
      }
     

    一个很好的博客

    http://www.cnblogs.com/tobecrazy/p/4553444.html 

    Selenium Webdriver元素定位的八种常用方式

    http://www.cnblogs.com/qingchunjun/p/4208159.html

    Selenium2+python自动化38-显式等待(WebDriverWait)

    http://blog.csdn.net/u011541946/article/details/69694510

  • 相关阅读:
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
    MVC解决Json DataGrid返回的日期格式是/Date(20130450000365)
    Easyui 让DataGrid适应浏览器宽度
    Easyui 让Window弹出居中与最大化后居中
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
  • 原文地址:https://www.cnblogs.com/cherry1993/p/7903872.html
Copyright © 2020-2023  润新知