zoukankan      html  css  js  c++  java
  • 【Selenium-WebDriver自学】WebDriver交互代码(十一)

    ==========================================================================================================

        写在前面:

        最近项目一直很忙,没有时间来整理自动化测试方面的知识。

        由于项目忙,自动化测试一直未使用到项目中来,希望接下来在项目之余,能够抽出时间来将自动化测试投入到实际的项目中来。

    ==========================================================================================================

    参考链接:http://www.cnblogs.com/itliucheng/p/5578788.html

    1、Selenium定位器

    下表给出了定位selenium 元素的webdriver的Java语法。

    使用Jquery查找元素

    2、常用命令

    下表列出了webdriver的最常用的命令以及它的语法,这将有助于我们开发webdriver脚本。

    3、文本框的相互作用 

    String result = driver.findElement(By.id("cpar1")).getAttribute("value");
    driver.findElement(By.id("cpar1")).sendKeys("10");
    driver.navigate().to("http://www.baidu.com");
    driver.findElement(By.id("kw")).clear();
    driver.findElement(By.id("kw")).sendKeys("魔兽");
    driver.findElement(By.id("su")).click();

    4、单选按钮互动

    // Click on Radio Button
    driver.findElement(By.id("cpayoff1")).click();
      
    
    WebElement radioOption = driver.findElement(By.xpath("//input[@value='orange']"));
              if(!radioOption.isSelected()){
                  radioOption.click();
              }
              List<WebElement> fruits = driver.findElements(By.name("fruit"));
              for(WebElement fruit : fruits){
                  if(fruit.getAttribute("value").equals("watermelon")){
                      if(!fruit.isSelected()){
                          fruit.click();
                          Assert.assertTrue(fruit.isSelected());
                          break;
                      }
                  }
              }

    5、复选框交互

    // Click on check Box
    driver.findElement(By.id("caddoptional")).click();

    6、下拉交互

    用“selectByVisibleText'或'selectByIndex'或'selectByValue'的方法选择一个选项。
    Select dropdown = new Select(driver.findElement(By.id("ccompound")));
    dropdown.selectByVisibleText("continuously");
      
    
    Select dropSelect = new Select(driver.findElement(By.name("fruit")));
    //判断页面是否进行多选
     Assert.assertTrue(dropSelect.isMultiple());
     //使用选择项索引选择第三个选项
     dropSelect.selectByIndex(3);
     //根据value值选择
     dropSelect.selectByValue("value");
      //根据选项文字选择
      dropSelect.selectByVisibleText("苹果");
      //取消所有选项的选中状态
     dropSelect.deselectAll();
     //取消第三个的选中状态
     dropSelect.deselectByIndex(3);
     //根据value值取消选择
     dropSelect.deselectByValue("value");
     //根据选项文字取消选择
     dropSelect.deselectByVisibleText("苹果");

    7、同步

    THREAD.SLEEP
    Thread.Sleep(1000); //Will wait for 1 second.
    显式等待
    WebElement DynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("DynamicElement")));
    隐式等待
    WebElement DynamicElement = driver.findElement(By.id("DynamicElement"));
    流利等待
    Wait wait = new FluentWait(driver)
      .withTimeout(60, SECONDS)
      .pollingEvery(10, SECONDS)
      .ignoring(NoSuchElementException.class);
    WebElement dynamicelement = wait.until(new Function<webdriver,webElement>() 
    {
      public WebElement apply(WebDriver driver) 
      {
      return driver.findElement(By.id("dynamicelement"));
      }
     }
    );

    8、拖放

    http://www.yiibai.com/selenium/selenium_drag_drop.html#article-start
    WebElement From = driver.findElement(By.xpath(".//*[@id='j3_7']/a"));
            WebElement To = driver.findElement(By.xpath(".//*[@id='j3_1']/a"));
            Actions builder = new Actions(driver);
            Action dragAndDrop = builder.clickAndHold(From)
                            .moveToElement(To)
                            .release(To)
                            .build();
            dragAndDrop.perform();

    9、键盘操作

    void sendKeys(java.lang.CharSequence keysToSend)
    void pressKey(java.lang.CharSequence keyToPress)
    void releaseKey(java.lang.CharSequence keyToRelease)

    10、鼠标操作

    Click - 进行点击。我们还可以执行基于坐标的点击。
    contextClick - 执行上下文点击/右键单击一个元素或基于坐标
    doubleClick - 执行双击webelement或基于坐标。如果留空它执行双击当前位置。
    mouseDown - 执行一个元素上按下鼠标操作或基于坐标。
    mouseMove - 执行元素上的鼠标移动操作或基于坐标。
    mouseUp - 释放鼠标通常伴随着鼠标按下的动作和行为的基础上统筹。
    void click(WebElement onElement)
    void contextClick(WebElement onElement)
    void doubleClick(WebElement onElement)
    void mouseDown(WebElement onElement)
    void mouseUp(WebElement onElement)
    void mouseMove(WebElement toElement)
    void mouseMove(WebElement toElement, long xOffset, long yOffset)

    11、多选择操作

    12、查找所有链接

    java.util.List<WebElement> links = driver.findElements(By.tagName("a"));
            System.out.println("Number of Links in the Page is " + links.size());
            for (int i = 1; i<=links.size(); i=i+1)
            {
              System.out.println("Name of Link# " + i - + links.get(i).getText());
            }    

    13、等待操作

    设定查找页面元素的最大等待时间,调用findElement方法的时候没有能立即找到某个元素,则程序会每隔一段时间后不断的尝试判断页面的DOM中是否出现被查找的元素,如果超过设定的等待时长依旧没有找到,则抛出NoSuchElementException

    14、隐形等待

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
    @BeforeClass
     public static void init() {
         System.out.println("init...");
         System.setProperty("webdriver.chrome.driver","C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe");
         // 创建一个 ChromeDriver 的接口,用于连接 Chrome,
         //必须要有chromedriver.exe文件,selenium默认不能启动chrome
         // 创建一个 Chrome 的浏览器实例
         driver = new ChromeDriver();
         //最大化浏览器
         driver.manage().window().maximize();
         //设置全局的隐形等待
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
     }

    隐性等待的默认时长是0,一旦设置,这个隐试等待会在webdriver对象实例的整个生命周期起作用 

    15、显示等待

    显示等待比隐式等待更节约测试脚本执行的时间,推荐使用显示等待判断页面元素是否存在
    使用ExpectedConditions类中自带的方法,可以进行显示等待的判断

    //页面元素是否在页面上可用和可被点击
    ExpectedConditions.elementToBeClickable(By locator);
    //页面元素是否处于被选中状态
    ExpectedConditions.elementToBeSelected(By locator);
    //页面元素在页面是否存在
    ExpectedConditions.presenceOfElementLocated(By locator);
    //是否包含特定的文本
    ExpectedConditions.textToBePresentInElement(locator, text)
    //页面元素值
    ExpectedConditions.textToBePresentInElementValue(locator, text);
    //标题
    ExpectedConditions.titleContains(title);
    
    // 等待元素可见且可被单击
    wait.until(ExpectedConditions.elementToBeClickable(By.id(id)));

    16、自定义的显示等待

    public static void sendKeysByXPath(WebDriver driver, String path, String key) {
            WebDriverWait wait = new WebDriverWait(driver, 10); // 最多等10秒
            WebElement element = wait.until(new ExpectedCondition<WebElement>() {
                @Override
                public WebElement apply(WebDriver d) {
                    return d.findElement(By.xpath(path));
                }
            });
            highLightElement(driver,element);
            element.clear();
            element.sendKeys(key);
        }

    17、操作javascript的Alert弹窗

    driver.findElement(By.xpath(path)).click();
    //切换到alert弹出框
    Alert alert = driver.switchTo().alert();
    AssertionUtil.assertEquals("这是个alert弹出框", alert.getText());
    //使用alert的accept方法,单击alert的确定按钮,关闭alert
    alert.accept();
    //如果alert未弹出,会抛出NoAlertPresentException异常
    //切换回去原来的窗体
    driver.switchTo().defaultContent();
    alert.accept();是确定
    alert.dismiss();是取消

    18、操作模态框

    driver.switchTo().activeElement();

    ==========================================================================================================

        写在后面:

        这个模块学习的内容,应该是平时写代码过程中用到的最多的内容。可以尝试将部分内容写成共通,比如alert框的确定和消失等。

    ==========================================================================================================

     

  • 相关阅读:
    在Asp.net 2.0使用页面无刷新
    Asp.net 2.0 中的TreeView的右键菜单(Context Menus on the TReeView IE Specific)
    利用XMLHTTP无刷新自动实时更新数据
    表单提交中Get和Post方式的区别
    一个好的学习asp.net 2.0的网站
    用WebService实现web页面的局部刷新
    GridView中的数据导出到Excel中
    Windows 桌面主题,桌面背景
    通过OleDB连接方式,访问Access,Excel数据库.
    转:VS.NET2005安装与设置指南
  • 原文地址:https://www.cnblogs.com/conquerorren/p/8252624.html
Copyright © 2011-2022 走看看