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 定位一组元素
例如需要定位如下元素:
<input class="inputClass" type="text" name="user" id="userId" />
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<Cookie> 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();
网友评论