您的位置:首页 > 编程语言 > Java开发

selenium 2.0 java 接口简介

2013-06-09 09:54 423 查看
Selenium是一个用于Web应用程序测试的工具。Selenium直接运行在浏览器中,就像真正的用户在操作一样。

Selenium2.0 java的一个简单示例如下:

WebDriver driver = new FirefoxDriver();           //启动firefox浏览器

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

driver.get(“http://www.sina.com.cn”);           //访问一个页面

System.out.println(driver.getPageSource());       //打印页面源码

driver.quit();                                    //退出浏览器

    get方法访问一个页面,当调用get方法时,WebDriver会一直阻塞直到该页面完全加载完成。若一个页面加载速度过慢,则会导致get方法一直阻塞,因此有时候需要对get方法设定一个超时时间,当加载超时时停止加载。设定超时的方法有两种,第一种是用selenium提供的页面加载超时方法,如:

driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.SECONDS);

try {

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

         driver.quit();

} catch (TimeoutException e) {

         driver.quit();

}

    当超时时,任何关于driver的操作都会被阻塞,只有driver.quit()会立即关闭浏览器,销毁浏览器对应的资源。pageloadTimeout方法只适用于firefox浏览器,Chrome等其他浏览器并不适用,但我们可以自己实现一个定时器,如:

Timer timer = new Timer();

timer.schedule(new TimerTask() {

         @Override

         public void run() {

             // TODO Auto-generated method stub

             driver.quit();

         }

}, 1000);

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

timer.cancel();

    一些web应用程序有许多Frames或多个Windows。 WebDriver支持使用“switchTo”的方法实现的窗口之间切换。以下示例展示了如何关闭除主窗口之外的其它窗口:

String parentWindowHandle = driver.getWindowHandle();

Iterator  windowIterator = driver.getWindowHandles().iterator();

while (windowIterator.hasNext()) {

         String windowHandle = windowIterator.next();

         if (!windowHandle.equals(parentWindowHandle)) {

                driver.switchTo().window(windowHandle);

                driver.close();

         }

}

driver.switchTo().window(parentWindowHandle);

    有的Web应用程序会弹出窗口,也可以通过switchTo在主窗口和弹出窗口之间切换,如:

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

alert.accept();

    若要定位网络中的UI元素,可以通过findElement及findElements的方法,第一个方法返回一个WebElement或者抛出异常。后者返回所有WebElement的列表,或者空列表。获取和定位元素一般调用By方法,包括By
ID、 By Class Name、By
Tag Name、By Name、By Link Text、By
Partial Link Text、By CSS以及By XPATH等。例:

WebElement element = driver.findElement(By.xpath("//input[@id="form_submit"]";

    查找元素时,也可以设定超时,比较方便地方法是全局设定,如:

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

    当查找到的元素时IFrame时,则可和Windows之间可以进行切换,如:

driver.switchTo().frame(element);

    当查找到的元素可点击时(比如按钮、单选框、多选框、链接等),则可调用click方法进行点击,如:

element.click();

    一般,调用click方法,点击发生在元素的中间位置,若想点击元素的其它地方,可以调用moveToElement的方法,如:

(new Actions(driver)).moveToElement(element, 20, 20).click().perform();

    一些可点击的元素点击后,可能会跳到一个新的页面,通过windows的切换可获取到新页面的url及title,如:

element.click();

String parentWindowHandle = driver.getWindowHandle();

Iterator  windowIterator = driver.getWindowHandles().iterator();

while (windowIterator.hasNext()) {

        String windowHandle = windowIterator.next();

     if (!windowHandle.equals(parentWindowHandle)) {

             driver.switchTo().window(windowHandle);

        break;

     }

}

System.out.println(driver.getCurrentUrl());

System.out.println(driver.getTitle());

    在Firefox中,页面发生切换后,立即通过getCurrentUrl获取新页面url可能会返回"about:blank",过段时间再通过getCurrentUrl时,才能返回正确的url,介于此,修改getCurrentUrl方法如下:

String getCurrentUrl() {

         String url = "";

         int maxRetry = 10;

         url = driver.getCurrentUrl();

         while (url.trim().equalsIgnoreCase("about:blank") && maxRetry > 0)

         {

                   Thread.sleep(1000);

                   url = driver.getCurrentUrl();

                   maxRetry--;

         }

         return url;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  selenium