WebDriver拾级而上·之四 操作页面元素
- 输入框(text field or textarea)
//找到输入框元素: WebElement element = driver.findElement(By.id("passwd-id")); //将输入框清空: element.clear(); //在输入框中输入内容: element.sendKeys(“test”); //获取输入框的文本内容: element.getText();
下拉选择框(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(); } }
- 单选项(Radio Button)
//找到单选框元素: WebElement bookMode =driver.findElement(By.id("BookMode")); //选择某个单选项: bookMode.click(); //清空某个单选项: bookMode.clear(); //判断某个单选项是否已经被选择: bookMode.isSelected();
- 多选项(checkbox)
//多选项的操作和单选的差不多: WebElement checkbox =driver.findElement(By.id("myCheckbox.")); checkbox.click(); checkbox.clear(); checkbox.isSelected(); checkbox.isEnabled();
- 按钮(button)
//找到按钮元素: WebElement saveButton = driver.findElement(By.id("save")); //点击按钮: saveButton.click(); //判断按钮是否enable: saveButton.isEnabled ();
左右选择框
也就是左边是可供选择项,选择后移动到右边的框中,反之亦然。
例如:
Select lang = new Select(driver.findElement(By.id("languages"))); lang.selectByVisibleText(“English”); WebElement addLanguage =driver.findElement(By.id("addButton")); addLanguage.click();
- 弹出对话框(Popup dialogs)
Alert alert = driver.switchTo().alert(); alert.accept(); alert.dismiss(); alert.getText();
表单(Form)
Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElement approve = driver.findElement(By.id("approve")); approve.click(); 或 approve.submit();//只适合于表单的提交
上传文件 (Upload File)
上传文件的元素操作:
WebElement adFileUpload = driver.findElement(By.id("WAP-upload")); String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg"; adFileUpload.sendKeys(filePath);
拖拉(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是不会执行的。导航 (Navigationand History)
//打开一个新的页面: driver.navigate().to("http://www.example.com"); //通过历史导航返回原页面: driver.navigate().forward(); driver.navigate().back();
获取页面CSS属性
1.获取文字颜色
dr.findElement(By.id("tooltip")).getCssValue("color")
2.获取文字字号
dr.findElement(By.tagName("h3")).getCssValue("font")