Selenium Webdriver 常用api

1.浏览器操作

-设置大小
driver.manage().window().setSize(new Dimension(1280,800));设置浏览器分辨率为:1280x500

  • 最大化浏览器
      driver.manage().window().maximize();

  • 关闭浏览器 
    driver.close(); //关闭当前的窗口
    driver.quit();//关闭所有的window
    tip:可以用 driver.window_handles 查看window handle

  • 打开测试页面

driver.get("http://www.google.com");
driver.navigate().to("http://www.baidu.com/"); 

//navigate前进后退,刷新
driver.navigate().forward();
driver.navigate().back();
driver.navigate().refresh();

navigate方法会产生1个Navigator对象,其封装了与导航相关的一些方法,比如前进后退等 navigate()进行页面跳转时不会进行页面数据的校验(比如当前页面有必填项但是实际上没填,navigate也会跳到to页面),相反get()则可以进行这些校验,更真实的模拟实际情况

2.页面元素定位

Webdriver提供下面两种方法来定位页面元素,
参数是By对象,最常用是By.id和By.name查找。
findElement 定位某个元素,如果没有找到元素会抛出异常:NoSuchElementException
findElements 定位一组元素

例如需要定位如下元素:

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

By.name:
      WebElement element = driver.findElement(By.name("user"));

By.xpath:
      WebElement element =driver.findElement(By.xpath("//input[@id='userId']")); 

By.className
      WebElement element = driver.findElement(By.className("inputClass"));

By.cssSelector
      WebElement element = driver.findElement(By.cssSelector(".input_class"));

By.linkText:
      //通俗点就是精确查询
      driver.get("http://www.baidu.com/"); 
      WebElement element = driver.findElement(By.linkText("百科"));

By.partialLinkText:
      //这个方法就是模糊查询
      driver.get("http://www.baidu.com/"); 
      WebElement element = driver.findElement(By.partialLinkText("hao"));

By.tagName:
      driver.get("http://www.baidu.com/");  
      String test= driver.findElement(By.tagName("form")).getAttribute("name");
      System.out.println(test); 

小技巧:当使用某一属性识别元素时如果返回了多个,可通过先找到唯一的父元素,然后再找他的子元素,如下:
WebElement web=driver.findElement(By.id("form")).findElement(By.id("kw"));

另外通常可以使用xpath来定位元素,能解决大部分HTML元素定位问题。

3.对页面元素进行操作

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

选择
select_by_index(index) ——通过选项的顺序,第一个为 0
select_by_value(value) ——通过value属性
select_by_visible_text(text) ——通过选项可见文本

取消
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()

selenuim页提供了三种属性,提供必要的信息
options ——提供所有的选项的列表,其中都是选项的WebElement元素
all_selected_options ——提供所有被选中的选项的列表,其中也均为选项的WebElement元素
first_selected_option ——提供第一个被选中的选项,也是下拉框的默认值


//示例
Select select = new Select(driver.findElement(By.id("citySelect")));  
select.selectByVisibleText(“杭州”);
select.selectByValue(“330100”); 
select.deselectAll();
select.deselectByValue(“330100”);
select.deselectByVisibleText(“杭州”);
select.getAllSelectedOptions();
select.getFirstSelectedOption(); 
  • 单选项(Radio Button)
    WebElement radio=driver.findElement(By.id("sexMode"));

radio.click();     //选择某个单选项
radio.clear();     //清空某个单选项
radio.isSelected();  //判断某个单选项是否已经被选择

  • 多选项(checkbox)

WebElement checkbox = driver.findElement(By.id("myCheckbox."));

checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();

  • 按钮(button)
    WebElement btn= driver.findElement(By.id("save"));

btn.click();      //点击按钮
btn.isEnabled ();  //判断按钮是否enable

  • 弹出对话框(Popup dialogs Alert)
    Alert alert = driver.switchTo().alert();

alert.accept();  //确定
alert.dismiss();  //取消
alert.getText(); //获取文本

  • 表单(Form)
      Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
    WebElement approve = driver.findElement(By.id("approve"));

approve.click();//单纯的点击
approve.submit();//只适合于表单的提交,涉及到前后台数据交互

  • 上传文件
    上传文件的元素操作:
    WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));

String filePath = "C:\test\uploadfile\media_ads\test.jpg";
FileUpload.sendKeys(filePath);

  • Windows 和 Frames之间的切换

driver.switchTo().defaultContent();     //返回到最顶层的frame/iframe
driver.switchTo().frame("leftFrame");    //切换到某个frame:
driver.switchTo().window("windowName"); //切换到某个window

  • 调用Java Script
    Web driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("JS脚本");

-超时设置

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);      //识别元素时的超时时间,影响范围:全局。(慎用)
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  //页面加载时的超时时间
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);  //异步脚本的超时时间

其他使用

-截图

WebDriver driver = new FirefoxDriver();
driver.get("[http://www.baidu.com](http://www.baidu.com/)");
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //图片以文件的形式返回
  • 改变user agent
    User Agent的设置是平时使用得比较多的操作:
FirefoxProfile profile = new FirefoxProfile();

profile.addAdditionalPreference("general.useragent.override","some UA string");
WebDriver driver = new FirefoxDriver(profile);
  • 读取Cookies

增加cookie:

// 增加

Cookie cookie = new Cookie("key", "value");

driver.manage().addCookie(cookie);

获取cookie的值:

// 输出cookie

Set allCookies = driver.manage().getCookies();

for (Cookie loadedCookie : allCookies) {
   System.out.println(String.format("%s -> %s",loadedCookie.getName(), loadedCookie.getValue()));

}

根据某个cookie的name获取cookie的值:

driver.manage().getCookieNamed("mmsid");

删除cookie:

// 有三种删除方式

// By name
driver.manage().deleteCookieNamed("CookieName");

// By Cookie
driver.manage().deleteCookie(loadedCookie);

// 删除所有
driver.manage().deleteAllCookies();

你可能感兴趣的:(Selenium Webdriver 常用api)