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 定位一组元素

例如需要定位如下元素:
<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("http://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"));

另外通??梢允褂脁path来定位元素,能解决大部分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();
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容