Skip to content

WebDriver自定义操作:

打开网页

 WebDriver driver = new ChromeDriver();   
 driver.get(String url)
 driver.get("http://www.w3school.com.cn/") 

查找Web元素

WebElement element = driver.findElement(By.id("password"));
List<WebElement> elements = driver.findElements(By.id("password"));

输入框操作


//找到输入框元素

WebElement element = driver.findElement(By.id("password"));

//在输入框中输入内容:

element.sendKeys("123456");

//将输入框清空:

element.clear();

//获取输入框的文本内容:

element.getText();

下拉框操作

select.selectByIndex(int num)

num---选项对应的索引值

select.selectByValue(String str)

str---选项对应的value属性值

select.selectByVisibleText(String str)

str---选项值

例如:

//找到下拉选择框的元素:

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();

单选项(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 ();

浏览器行为模拟

driver.navigate().back()
//该方法的作用是模拟单击浏览器的后退按钮。
driver.navigate().forward()
// 该方法的作用是刷新当前页面
driver.navigate(). refresh()

WebDriver 退出

// 该方法的作用是模拟用户单击浏览器窗口上或者标签的关闭按钮。
driver.close()
//退出driver,并关闭所有相关的窗口
driver.quit()

组合动作的实现

Actions action = new Actions(driver);
action.doubleClick(element);
action.perform();   

设置WebDriver的延时


driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit);

方法作用:因为Load页面需要一段时间,如果页面还没加载完就查找元素不一定能查找到元素,所以需要设置一个超时时间
这个等待时间只是用在findElement/findElements上面

参数:

    time---等待时间

    unit ---时间单位

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

关于wait,这片文章不错implicit-waits-explicit-waits 事实上如果期望使用implicitlyWait解决所有的timing的问题是做不到的(期望一个方法处理有的问题没有做的到方法) ,效率也不高,而使用WebDriver的FluentAPI(Expectation)能够根据不同的场景处理.

提交表单

element.submit()
方法作用:提交一个指定的表单,适用于没有提交按钮的表单。

浏览器多窗口处理

在进行Web测试时,还会弹出一些子窗口,并且在多个窗口之间进行切换操作。


//当进行了某个操作,将会有新窗口弹出时,如果要到新开的页面上进行操作,需要切换到新窗口。

 //Switch to new window opened 

for(String winHandle : driver.getWindowHandles()){ 

System. out.println( "+++" + winHandle); 

driver.switchTo().window(winHandle); 

}  

// WindowHandles可以认为是每个窗口的标示

具体的使用可以参考WebDriverHelper[WebDriverHelper.md]里面的switchTab,closeTab的实现

Frames之间的切换

有时候,切换前最好先执行:

driver.switchTo().defaultContent();

切换(第一次)到某个frame:

driver.switchTo().frame("leftFrame");

从一个frame切换(第二次)到另一个frame:

driver.switchTo().defaultContent();

driver.switchTo().frame("mainFrame");

比如,在富文本框里输入文本,然后提交

//根据iframe id

driver.switchTo().frame( "ueditor_0");

//抓取元素类

driver.findElement(By. xpath("//body[@class='view']")).sendKeys( "测试前台反馈输入 test input" );

//切换到默认的frame

driver.switchTo().defaultContent();

driver.findElement(By. xpath("//input[@value='提交']")).click();

操作对话框

Alert alert = driver.switchTo().alert();

alert.accept() --- 确定

alert.dismiss() --- 取消

alert.getText() --- 提示信息

上传文件

WebElement adFileUpload = driver.findElement(By.id("WAP-upload"));

String filePath = "C:\\test\\uploadfile\\media_ads\\test.jpg";

adFileUpload.sendKeys(filePath);

或者

setClipboardData("E:\\autotest\\hw.jpg");

driver.findElement(By.name("goods_img")).click();

        try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 //   

 uploadFile(robot);  

用来设置剪贴板上的数据

以下实际上和Selenium无关,主要调用java awt 里面的api来做系统层的操作,不过实际的使用过程中可以借鉴来解决 很多不好解决的操作


public void setClipboardData(String string) {

StringSelection stringSelection = new StringSelection(string);

Toolkit.getDefaultToolkit().getSystemClipboard()

.setContents(stringSelection, null);

  }

该方法用来上传附件

 public void uploadFile(Robot robot) {

       robot.keyPress(KeyEvent.VK_CONTROL);

       robot.keyPress(KeyEvent.VK_V);

       robot.keyRelease(KeyEvent.VK_V);

       robot.keyRelease(KeyEvent.VK_CONTROL);

       robot.keyPress(KeyEvent.VK_ENTER);

       robot.keyRelease(KeyEvent.VK_ENTER);

  }

不通过WebDriver来打开某个浏览器


   java.awt.Desktop dp = java.awt.Desktop.getDesktop();
   // 判断系统桌面是否支持要执行的功能
   if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
   // 获取系统默认浏览器打开链接
   dp.browse(uri);
 }