Selenium WebDriver高级用法

Selenium WebDriver高级用法

掌握selenium初级用法后,来继续深刻学习一下。html

选择合适的WebDrvier

WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvierFirefoxDriverInternetExplorerDriverChromeDriverOperaDriver,除了 InternetExplorerDriver只能在Windows平台运行,其余WebDriver均能跨平台。web

若是追求运行速度,HtmlUnitDriver是首选,可是它没有运行界面,不能实时看到运行效果。若是想看到运行效果,可使用FirefoxDrvier,它会真正打开浏览器,在屏幕上运行,所以咱们能够监测页面元素的位置、CSS的值等,可是代价就是速度慢。
这里为了简单,使用 HtmlUnitDriver.浏览器

WebDriver  driver = new HtmlUnitDriver();

导航

有了WebDriver实例,第一件事情就是打开页面。通常的作法是调用get方法:学习

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

WebDriver会一直等待,直到页面加载完毕(也就是"onload"方法释放)。google

和页面进行交互

仅仅打开页面还不够,咱们须要的是在页面上进行操做,进一步讲就是要操做页面中的html元素,如:spa

<input type="text" name="passwd" id="passwd-id" />

要操做页面元素,首先要定位元素,能够经过多种方法定位,以下:code

WebElement element;    element = driver.findElement(By.id("passwd-id"));    element = driver.findElement(By.name("passwd"));    element = driver.findElement(By.xpath("//input[@id='passwd-id']"));

定位元素时,有两点要注意。经过text的值来定位一个Link时,text必须精确匹配;经过xpath来定位元素时,若是匹配到多条,只会返回第一条结果,若是没有匹配到,会抛NoSuchElementException异常。orm

WebDriver拥有"Object-baseed" API,咱们可使用WebElement来表示全部的页面元素。WebElement类有不少操做元素的方法,可是有些方法可能对当前元素无效,不用担忧,WebDriver会尽力帮咱们处理。如,对一个"meta"标签元素,咱们调用了WebElement的"SetSelected()"方法,WebDriver会抛出异常。htm

咱们定位到一个Element,接下来,咱们可能要进行一些操做,如想键入一些字符:接口

element.sendKeys("sone text");

固然,咱们也能够经过"Keys"这个类,来模拟键盘输入:

element.sendKeys(" and some", Keys.ARROW_DOWN);

记住,咱们向这些元素输入的字符串,它们不会自动清空,也就是说调用"sendKeys()"方法,就是向元素中追加字符串。若是要清空一个input标签或者textarea:

element.clear();

填写表单

已经知道了如何键入字符串,那么其余元素呢?如checkboxes,如何选中;"OPTION"标签,如何设置"setSelected()"。下面是处理Select标签的例子:

WebElement select = driver.findElement(By.xpath("//select"));    List<WebElement> allOptions = select.findElements(By.tagName("option"));    for(WebElement option : allOptions)    {    System.out.println(String.format("Value is " %s, option.getAttribute("value")));    option.click();    }

上面的代码,首先定位一个Select元素,而后获取它下面的全部option,而且打印出来,执行一个click操做。明显,若是想选中某个选中,这种方法不是最佳选择。其实WebDrvier定义了Select类,它提供一些更快捷的方式,如"selectByIndex()"、"selectByValue()"。

表单填写完毕,而后就是提交,咱们能够经过点击提交按钮,进行提交。

driver.findElement(By.id("submit")).click();

或者,WebElement提供"submit()"这个方法,若是当前元素处在form表单中,调用该元素的submit方法,WebDriver就会自动提交这个表单;若是不处于form表单中,会抛出"NoSuchElementException"异常。

element.submit();

拖放

WebDriver容许咱们拖放元素,如将某个元素拖到其余地方、或者将某个元素拖到其余元素上。

WebElement element = driver.findElement(By.name("source"));    WebElement element = driver.findElement(By.name("target"));    (new Actions(driver)).dragAndDrop(element, target).perform();

切换window或者Frame

对于如今的web应用程序来讲,不多有单个window的状况,都是嵌入了其余的frame。WebDrvier支持使用"switchTO"方法切换到其余window。

driver.switchTo().window.("windowName");

上面的代码执行后,driver就会切换到windowName这个window。可是如何获取windowName呢?来一个例子:

<a href="http://www.yeetrack.com" target="windowName">点击打开新窗口</a>

还有,咱们能够经过"window handle"来切换,而且还能够遍历当前全部的window

继续阅读→

相关文章
相关标签/搜索