Lekcija10 - 02_Selenium_2010-11-11_en - files-ante-lv

quaggahooliganInternet και Εφαρμογές Web

5 Φεβ 2013 (πριν από 4 χρόνια και 5 μήνες)

173 εμφανίσεις

Testing Web applications

Selenium

What is Selenium?


Selenium is a suite of tools to automate web
application

testing across many platforms



Tests run directly in the browser



Selenium is implemented entirely with browser

technology


JavaScript


DHTML


Frames

Traditional approach for testing

Release

Development


Feature developed

Acceptance Testing

Bug found!

Regression Testing

Regression found!

Faster feedback


Write test as you go



Run them as often as you can



Problems are found quickly

Release

Regression Testing

Acceptance Testing

Development

Why automated tests?


Manual testing is slow, tedious and error
-
prone


Especially for regression!







Either take long time or less thorough



What now? Start again?

Regression Testing

3 months

With automated tests


Consistently thorough



Fast enough to start again and again and again…

Regression Testing

10 minutes

Selenium components


Selenium Core


a test tool for web applications



Selenium IDE


an integrated development environment for Selenium tests



Selenium Remote Control


more advanced


runs tests in multiple browsers and platforms



Selenium Grid


extends Selenium R
emote Control

to distribute tests
across multiple servers

Selenium Core


Selenium Core tests run directly in a browser, just
as real users do



Tests run in Internet Explorer, Mozilla and
Firefox on Windows, Linux, and Macintosh



Selenium is written

in pure JavaScript/DHTML



You copy Selenium Core tests directly into your
your application web server, allowing the tests to
run in any supported browser on the client
-
side

Selenium usages


Browser compatibility testing


Test your application to see if it works correctly
on different browsers and operating systems. The
same script can run on any Selenium platform.



System functional testing


Create regression tests to verify application
functionality and user acceptance.


How to start


Download and install Selenium IDE



It is implemented as a Firefox extension, and
allows you to record, edit, and debug tests



http://selenium
-
ide.openqa.org/download.jsp




To launch Selenium IDE in Firefox select



Tools


Selenium IDE


Selenium IDE


Fire
f
ox extension



Easy record and playback



Not just a recorder



Intelligent field selection


will use IDs, names,


or XPath as needed

Selenium IDE


Auto
-
complete for all
common Selenium
commands



Walk through tests



Debug and set breakpoints



Save tests as HTML, Ruby
scripts, or any other format


Selenium test format


Selenium saves all information in an HTML table
format



Each record consists of:



Command



tells Selenium what to do using actions or
assertions (e.g. “open”, “type”, “click”, “assertText”)



Target


tells Selenium which HTML element a
command refers to (e.g. textbox, header, table)



Value


used for any command that might need a value
of some kind (e.g. “Hello”)

Example: Selenium test

Test writing strategy

1.
Start recording in Selenium IDE


2.
Execute scenario on running web application


3.
Stop recording in Selenium IDE


4.
Add assertions

Adding Selenium tests to Web app


To include Selenium tests into your Web
application need to do the following:


1.
Download Selenium Core from


http://selenium
-
core.openqa.org/download.jsp


2.
Unzip in under “webapp” directory:

\
your_app
\
src
\
main
\
webapp
\
selenium
-
core


3.
Place your tests into e.g.

\
your_app
\
src
\
main
\
webapp
\
tests

Creating tests and test suite


Create several tests in Selenium IDE



Save them as e.g.


\
webapp
\
tests
\
discussions
-
suite
\
MyTest1.html


\
webapp
\
tests
\
discussions
-
suite
\
MyTest2.html



Create HTML file for test suite, e.g.

\
webapp
\
tests
\
discussions
-
suite
\
MyTestSuite.html

<table>

<tr><td>Music Test Suite</td></tr>

<tr><td>

<a target="testFrame" href=“
MyTest1
.html
">
My Test 1
</a>

</td></tr>

<tr><td>

<a target="testFrame" href="
MyTest2
.html
">
My Test 2
</a>

</td></tr>

</table>

Entering point: /tests/index.html

Prepare initial page with a link to your test suite

<html>

<head>

<title>Selenium tests</title>

</head>

<body>

<h1>Music Portal Selenium Tests</h1>

<p>


<a href
="../selenium
-
core/core/TestRunner.html?test=


../../
tests/discussions
-
suite/
My
TestSuite.html
">


Run tests</a>

</p>

</body>

</html>

Selenium TestRunner view

Browser will display Selenium TestRunner

Selenium Concepts


Element Locators


Specify HTML elements


Patterns


Used for pattern matching values


Action


Manipulate the state of the application


Upon failure, testing stops


Accessors


Store results in variables


Automatically generates assertions


Assertion


Verifies that the application generated the appropriate value

Element Locators


id=id


Select the element with the specified @id attribute.



name=name


Select the first element with the specified @name attribute.



identifier=id


Select the element with the specified @id attribute


If no match is found, select the first element whose @name id.



dom=javascriptExpression


Find an element using JavaScript traversal of the HTML
DOM
. DOM locators must begin with "
document.
"


dom=document.forms['myForm'].myDropdown


dom=document.images[56]

Element Locators


xpath=xpathExpression


Locate an element using an XPath expression. XPath
locators must

begin with "//".


xpath=//img[@alt='The image alt text']


xpath=//table[@id='table1']//tr[4]/td[2]



link=textPattern


Select the link (anchor) element which contains text
matching the

specified pattern.


link=The link text

Locator Defaults

Without a locator prefix, Selenium uses:


dom, for locators starting with "document."


xpath, for locators starting with "//"


identifier, otherwise

Actions


Represent something a user would do



Manipulate the state of the application



Actions generally come in 2 forms:
action

and

actionAndWait



a
ction

performs the action



actionAndWait

assumes a server call and thus
waits longer for a

response



open

automatically waits

Command Actions


o
pen


Opens the target URL



c
lick*


Clicks on the target element



t
ype*


Enters the value specified by the value into the
specified target element



s
elect*


Selects a drop
-
down value specified by the value in
the specified target element

Command Actions


selectWindow


Selects a popup window using the id specified by the
target. If NULL, it returns to the main window



goBack


Simulates user clicking back in the browser



close


Simulates user clicking the close button of a popup
window



pause


Pauses the execution of a script for an amount of
time in milliseconds specified in the target

Command Actions


fireEvent


Simulate an event to trigger the onevent handler
where the target specifies the element and the value
specifies the event



waitForValue


Waits for an input, specified by the target, to have a
certain value, specified by the value (Warning: If
event doesn’t occur, apply previous fix to stop
running script)



store


Stores the value specified by the target into the
variable specified by the value

Command Actions


chooseCancelOnNextConfirmation


Instructs Selenium to select cancel on the next
JavaScript dialog raised



answerOnNextPrompt


Instructs Selenium to return the specified target in
response to the next prompt


Assertions


Allows user to verify the state of the

application



Three modes:



a
ssert

-

upon

failure, test is aborted



v
erify

-

upon

failure, the test continues running
(logging

the failure)



waitFor


Waits timeout time for a condition’s truthiness


Great for testing background Ajax behavior

Selenium Remote Control

A

test tool that allows

you to write automated

web application UI tests

in any programming

language
against any

HTTP website using

any mainstream

JavaScript
-
enabled

browser

http://seleniumhq.org/projects/remote
-
control/


Selenium Remote Control


Selenium RC comes in two parts


1.
A server which automatically launches and kills
browsers, and acts as a HTTP proxy for web
requests from them


2.
Client libraries for your favorite computer
language

Selenium Remote Control


Great for testing complex AJAX
-
based web user
interfaces under a Continuous Integration system



Ideal for users of Selenium Core or Selenium IDE
who want to write tests in a
more expressive
programming language
than the Selenese
HTML table format customarily used with
Selenium Core

Sample Test Script


Imagine recording the following test with
Selenium
-
IDE

The same test in Java

Selenium Grid

Allows the several

Remote Control

servers to
be

accessed

in parallel by one

or more driving

processes

http://selenium.openqa.org/selenium
-
grid.html


Selenium
Resources


Selenium Home Page


http://
seleniumhq.org
/




Selenium dokument
ācija


http://seleniumhq.org/docs/



Par Selenium l
atviski


http://www.ante.lv/xwiki/bin/view/Training.WebProgramm
ing/Selenium




Selenium Core 1.0 Reference


http://release.seleniumhq.org/selenium
-
core/1.0/reference.html



HttpUnit

HttpUnit framework


HttpUnit is an open source software testing
framework used to perform testing of web sites
without the need
for a web browser

Obtaining a web page response


The center of HttpUnit is the
WebConversation

class, which takes the place of a browser talking
to a single site



R
esponsible for maintaining session context,
which it does via cookies returned by the server



Must create a request and ask the

WebConversation

for a response

Starting the conversation





The response may now be manipulated either as
pure text,

as a DOM, or by using the various
other methods

WebConversation

wc

= new
WebConversation
();

WebRequest

req

= new
GetMethodWebRequest
(



"http://www.meterware.com/testpage.html");

WebResponse

resp

=
wc.getResponse
(
req
);

Examining and following links


The simplest and most common form of
navigation among web pages is via links



HttpUnit allows users to find links by the text
within them, and to use those links as new page
requests

WebConversation

wc

= new
WebConversation
();

WebResponse

resp

=
wc.getResponse
(


"http://www.httpunit.org/doc/cookbook.html");

WebLink

link =
resp.getLinkWith
("response");

link.click
();

WebResponse

jdoc

=
wc.getCurrentPage
();

Using the table structure of a web page


The
getTables()
method will return an array of
the top
-
level tables in the page, in the order in
which they appear in the document



Given a table, you can ask for one of its cells, and
treat the result either as text or a DOM or ask for
and tables, links, or forms nested within it

Table manipulation example


The following code will confirm that the first
table in the page has 4 rows and 3 columns, and
that there is a single link in the last cell of the first
row:

WebTable

table =
resp.getTables
()[0];

assertEquals
("rows", 4,
table.getRowCount
());

assertEquals
("columns", 3,table.getColumnCount());

assertEquals
("links", 1,


table.getTableCell
(0,2).
getLinks
().length );

Working with forms


There are a few basic things that a tester is likely
to want to do with a form



The most obvious first step is to verify the
controls and their default values



I
f they are correct, the tester will generally make
some changes and submit the form to see how the
system responds

Testing a form

WebForm

form =
resp.getForms
()[0];

assertEquals
("La
Cerentolla
",


form.getParameterValue
( "Name" ));

assertEquals
("Chinese",


form.getParameterValue
( "Food" ));

assertEquals
("
Manayunk
",


form.getParameterValue
( "Location" ));

assertEquals
("on",


form.getParameterValue
( "
CreditCard
" ));

form.setParameter
( "Food", "Italian" );

form.removeParameter
( "
CreditCard
" );

form.submit
();


HttpUnit
Resources


HttpUnit home page


http://httpunit.sourceforge.net/