Selenium WebDriver(4)

发表于:2014-04-04来源:博客园作者:思勉点击数: 标签:selenium
} 你也可以在Frame之间切换(或者进入Frame): driver.switchTo().frame(frameName); 你还可以根据路径使用Frame的子Frame,而且可以通过索引定位Frame。 driver.switchTo().f

  }

  你也可以在Frame之间切换(或者进入Frame):

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

  你还可以根据路径使用Frame的子Frame,而且可以通过索引定位Frame。

  driver.switchTo().frame("frameName.0.child");

  以上方法将切换到名称为“frameName”的Frame的第一个子Frame,所有Frame都是Web页面的最顶端开始计数。

  7.5弹出框

  Selenium2.0 beta1版本,我们提供方法获取弹出框。在你触发弹出框的操作后,你可以用一下方法进入弹出框:

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

  以上方法将会返回当前当前打开的alert对象,你可以对这个对象进行任何可操作:点击取消,点击确定,关闭窗口,获取alert的文本内容等。这个接口在alerts、confirms、prompts对象上都有很好的应用,具体请参见API文档。

  7.6Navigation:浏览器本地历史记录

  前文中,我们使用get方法来获取网页(driver.get("http://www.example.com"))。正如你看到的,WebDriver有不少轻量级的功能聚焦的接口,Navigation就是这样一个。正因为加载网页是一个再普通不过的需求,这个方法存在于Driver类下面,但是用法很简单:

  driver.navigate().to("http://www.example.com");

  重申一下,"navigate().to()"和"get()"做的是同样的事情,只不过其中一个更适合打印。

  Navigate接口还提供方法可以在浏览器历史记录中前后翻页。

  driver.navigate().forward();

  driver.navigate().back();

  请注意,以上功能完全取决于底层的浏览器。如果你习惯跨浏览器操作,当你使用这些接口时可能会出现意想不到的的异常。

  7.7Cookies

  在我们开始下一步的讲解之前,你可能对WebDriver如何操作本地Cookies很感兴趣。首先,你必须处于当前Cookie的作用域。如果你在打开一个网页之前尝试预置Cookie,而且你的主页大到需要很长一段时间来加载,这时候你需要找一个小点的网页来替代,比如HTTP 404网页(http://example.com/some404page)。

  // 打开Cookie作用的网站

  driver.get("http://www.example.com");

  // 设置全局Cookie

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

  driver.manage().addCookie(cookie);

  // 输出当前网页所有可用的Cookie

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

  for (Cookie loadedCookie : allCookies) {

  System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));

  }

  // 你又三种方法删除Cookie

  // By name

  driver.manage().deleteCookieNamed("CookieName");

  // By Cookie

  driver.manage().deleteCookie(loadedCookie);

  // Or all of them

  driver.manage().deleteAllCookies();

  7.8 修改用户代理服务器

  对于FireFox来说很简单:

  FirefoxProfile profile = new FirefoxProfile();

  profile.addAdditionalPreference("general.useragent.override", "some UA string");

  WebDriver driver = new FirefoxDriver(profile);

  7.9 拖拽Web元素

  下面是一个拖拽Web页面元素的例子,前提是本地事件必须可用。

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

  WebElement target = driver.findElement(By.name("target"));

  (new Actions(driver)).dragAndDrop(element, target).perform();

  8 各种Driver的特性以及如何选择合适Driver

  翻译中

  9 向前兼容:融合WebDriver和Selenium-RC

  翻译中

  10 为远程WebDriver单独启动Selenium Server

  翻译中

  译者注:

  1、原文链接:http://www.seleniumhq.org/docs/03_webdriver.jsp。

  2、文中只包含了java相关的操作,WebDriver还支持c#/Python/Ruby/Perl/PHP/Perl,如有需要,请阅读原文。

  3、language binding,又叫glue code,意思是胶水代码,比如有个C++的lib库,java调用这个库的api就叫java binding。参考:http://en.wikipedia.org/wiki/Language_binding。

  4、措辞拙劣,有些单词句子没有深究就直译了,深感从阅读到翻译差的不仅仅是一本字典,还有文化的差异。笔者强烈推荐直接阅读官网上的原文,如果我的译文给你造成误解,深感不安。这也是最后三章不敢继续班门弄斧的原因,等我对Selenium熟悉了之后再回来补全。

原文转自:http://www.ltesting.net/deltestingadmindd/