WebDriver拾级而上·之四 操作页面元素


  1. 输入框(text field or textarea)
    //找到输入框元素:
    WebElement element = driver.findElement(By.id("passwd-id"));
    //将输入框清空:
    element.clear();
    //在输入框中输入内容:
    element.sendKeys(“test”);
    //获取输入框的文本内容:
    element.getText();
    
  2. 下拉选择框(Select)

    //找到下拉选择框的元素:
    Select select = new Select(driver.findElement(By.id("select")));
    
    //选择对应的选择项:
    select.selectByVisibleText(“mediaAgencyA”);
    或
    select.selectByValue(“MA_ID_001”);
    
    //不选择对应的选择项:
    select.deselectAll();
    select.deselectByValue(“MA_ID_001”);
    select.deselectByVisibleText(“mediaAgencyA”);
    或者获取选择项的值:
    select.getAllSelectedOptions();
    select.getFirstSelectedOption();
    

    对下拉框进行操作时首先要定位到这个下拉框,new 一个Selcet对象,然后对它进行操作

    例如:

    http://passport.51.com/reg2.5p 这个页面为例。这个页面中有4个下拉框,下面演示4种选中下拉框选项的方法。

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;
    
    public class SelectsStudy {
       public static void main(String[] args) {
           System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
           WebDriver dr = new FirefoxDriver();
           dr.get("http://passport.51.com/reg2.5p");
    
           //通过下拉列表中选项的索引选中第二项,即2011年
           Select selectAge = new Select(dr.findElement(By.id("User_Age")));
           selectAge.selectByIndex(2);//Select.selectByIndex
    
           //通过下拉列表中的选项的value属性选中"上海"这一项
           Select selectShen = new Select(dr.findElement(By.id("User_Shen")));
           selectShen.selectByValue("上海");//Select.selectByValue
    
           //通过下拉列表中选项的可见文本选中"浦东"这一项
           Select selectTown = new Select(dr.findElement(By.id("User_Town")));
           selectTown.selectByVisibleText("浦东");Select.selectByVisibleText
    
           //这里只是想遍历一下下拉列表所有选项,用click进行选中选项
           Select selectCity = new Select(dr.findElement(By.id("User_City")));
           for(WebElement e : selectCity.getOptions())//Select.getOptions()
               e.click();
       }
    }
    
  3. 单选项(Radio Button)
    //找到单选框元素:
    WebElement bookMode =driver.findElement(By.id("BookMode"));
    //选择某个单选项:
    bookMode.click();
    //清空某个单选项:
    bookMode.clear();
    //判断某个单选项是否已经被选择:
    bookMode.isSelected();
    
  4. 多选项(checkbox)
    //多选项的操作和单选的差不多:
    WebElement checkbox =driver.findElement(By.id("myCheckbox."));
    checkbox.click();
    checkbox.clear();
    checkbox.isSelected();
    checkbox.isEnabled();
    
  5. 按钮(button)
    //找到按钮元素:
    WebElement saveButton = driver.findElement(By.id("save"));
    //点击按钮:
    saveButton.click();
    //判断按钮是否enable:
    saveButton.isEnabled ();
    
  6. 左右选择框

    也就是左边是可供选择项,选择后移动到右边的框中,反之亦然。

    例如:

    Select lang = new Select(driver.findElement(By.id("languages")));
    lang.selectByVisibleText(“English”);
    WebElement addLanguage =driver.findElement(By.id("addButton"));
    addLanguage.click();
    
  7. 弹出对话框(Popup dialogs)
    Alert alert = driver.switchTo().alert();
    alert.accept();
    alert.dismiss();
    alert.getText();
    
  8. 表单(Form)

    Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:

    WebElement approve = driver.findElement(By.id("approve"));
    approve.click();
    或
    approve.submit();//只适合于表单的提交
    
  9. 上传文件 (Upload File)

    上传文件的元素操作:

    WebElement adFileUpload = driver.findElement(By.id("WAP-upload"));
    String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";
    adFileUpload.sendKeys(filePath);
    
  10. 拖拉(Drag andDrop)

    WebElement element =driver.findElement(By.name("source"));
    WebElement target = driver.findElement(By.name("target"));
    (new Actions(driver)).dragAndDrop(element, target).perform();
    

    例如:下面这个页面是一个演示拖放元素的页面,你可以把左右页面中的条目拖放到右边的div框中。 http://koyoz.com/demo/html/drag-drop/drag-drop.html

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    
    public class DragAndDrop {
        public static void main(String[] args) {
            System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
            WebDriver dr = new FirefoxDriver();
            dr.get("http://koyoz.com/demo/html/drag-drop/drag-drop.html");
    
            //首先new出要拖入的页面元素对象和目标对象,然后进行拖入。
            WebElement  element = dr.findElement(By.id("item1"));
            WebElement  target = dr.findElement(By.id("drop"));
            (new Actions(dr)).dragAndDrop(element, target).perform();
    
            //利用循环把其它item也拖入
            String id="item" ;
            for(int i=2;i<=6;i++){
                String item = id+i;
                (new Actions(dr)).dragAndDrop(dr.findElement(By.id(item)), target).perform();
            }
        }
    }
    

    代码很简单,需要注意的是(new Actions(dr)).dragAndDrop(element, target).perform();这句话中,dragAndDrop(element, target)这个方法是定义了“点击element元素对象,然后保持住,直到拖到目标元素对象里面才松开”这一系列动作的Actions,如果你不调用perform()方法,这个Actions是不会执行的。

  11. 导航 (Navigationand History)

    //打开一个新的页面:
    driver.navigate().to("http://www.example.com");
    //通过历史导航返回原页面:
    driver.navigate().forward();
    driver.navigate().back();
    
  12. 获取页面CSS属性

    1.获取文字颜色

    dr.findElement(By.id("tooltip")).getCssValue("color")
    

    2.获取文字字号

    dr.findElement(By.tagName("h3")).getCssValue("font")