Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1130788
  • 博文数量: 276
  • 博客积分: 8317
  • 博客等级: 少将
  • 技术积分: 2329
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-12 08:17
个人简介

http://ads.buzzcity.net/adpage.php?partnerid=40096

文章分类

全部博文(276)

文章存档

2013年(1)

2012年(38)

2011年(102)

2010年(85)

2009年(45)

2008年(5)

分类: 嵌入式

2011-10-27 10:33:12

Posted by Tim Bray on 26 October 2011 at 12:46 PM

[This post is by Dounia Berrada, an engineer on the EngTools team. — Tim Bray]

Selenium WebDriver is a browser automation tool which provides a lightweight and elegant way for testing web apps. Selenium WebDriver is now available as an SDK extra in the Android SDK, and supports 2.3 (Gingerbread) and onwards!

Whether or not your site is optimized for mobile browsers, you can be sure that users will be accessing it from their phones and tablets. WebDriver makes it easy to write automated tests that ensure your site works correctly when viewed from the Android browser. We’ll walk you through some basics about WebDriver and look at it in action.

WebDriver Basics

WebDriver tests are end-to-end tests that exercise the web application just like a real user would. WebDriver models user interactions with a web page such as finger flicks, finger scrolls and long presses. It can rotate the display and interact with HTML5 features such as local storage, session storage and the application cache. Those tests run as part of an Android tests project and are based on Junit. They can be launched from Eclipse or the command line. WebDriver tests can be wired with a continuous integration system and can run on phone and tablet emulators or real devices. Once the test starts, WebDriver opens a WebView configured like the Android browser and runs the tests against it.

WebDriver is an Android SDK extra and can be installed following . Once you’ve done that you’ll be ready to write tests! There is a comprehensive WebDriver  on the Selenium site, but let’s start with a basic example using  to give you a taste of what’s possible.

Getting Started

First, create an Android project containing an empty activity with no layout.

public class SimpleAppActivity extends Activity {
   
@Override
   
public void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
   
}
}

Then create the Android test project that will contain the tests. WebDriver will create the WebView and set the layout automatically in the main Activity.

Let’s write a test that opens the Google home page on Android and issues a query for “weather in San Francisco”. The test will verify that Google returns search results, and that the first result returned is giving the weather in San Francisco.

public class SimpleGoogleTest extends ActivityInstrumentationTestCase2<SimpleAppActivity> {

   
public void testGoogleShouldWork() {
     
// Create a WebDriver instance with the activity in which we want the test to run
     
WebDriver driver = new AndroidDriver(getActivity());
     
// Let’s open a web page
      driver
.get("");

     
// Lookup for the search box by its name
     
WebElement searchBox = driver.findElement(By.name("q"));

     
// Enter a search query and submit
      searchBox
.sendKeys("weather in san francisco");
      searchBox
.submit();

     
// Making sure that Google shows 11 results
     
WebElement resultSection = driver.findElement(By.id("ires"));
     
List<WebElement> searchResults = resultSection.findElements(By.tagName("li"));
      assertEquals
(11, searchResults.size());

     
// Let’s ensure that the first result shown is the weather widget
     
WebElement weatherWidget = searchResults.get(0);
      assertTrue
(weatherWidget.getText().contains("Weather for San Francisco, CA"));
   
}
}

Now let’s see our test in action! WebDriver will create a WebView with the same configuration as the Android browser in the main UI thread, i.e. the activity thread. The activity will display the WebView on the screen, allowing you to see your web application as the test code is executing.

Interaction Testing

We’ve mentioned that WebDriver supports creating advanced gestures to interact with the device. Let’s use WebDriver to throw an image across the screen by flicking horizontally, and ensure that the next image in the gallery is displayed.

WebElement toFlick = driver.findElement(By.id("image"));
// 400 pixels left at normal speed
Action flick = getBuilder(driver).flick(toFlick, 0, -400, FlickAction.SPEED_NORMAL)
       
.build();
flick
.perform();
WebElement secondImage = driver.findElement(“secondImage”);
assertTrue
(secondImage.isDisplayed());

Now, let’s rotate the screen and ensure that the image displayed on screen is resized.

assertEquals(landscapeSize, secondImage.getSize())
((Rotatable) driver).rotate(ScreenOrientation.PORTRAIT);
assertEquals
(portraitSize, secondImage.getSize());

What if your test reveals a bug? You can easily take a screenshot for help in future debugging:

File tempFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);Find Out More

If this has whetted your appetite and you’d like to know more, go ahead and install the Android WebDriver, take a look at the documentation on the, or just . For questions and feedback not only of the Android WebDriver but also its desktop brethren, please join . For announcements keep an eye on .

阅读(1095) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~