(рднрд╛рдЧ 1)
рд░реВрдк рд░рдЪрдирд╛
рдЖрдЗрдП рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдХрд░ рд╣рдорд╛рд░рд╛ 'рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб' рдПрдкреНрд▓реАрдХреЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рд╕реЗ helloworld / app / views / Application / index.html рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
#{extends 'main.html' /} #{set title:'Home' /} <form action="@{Application.sayHello()}" method="GET"> <input type="text" name="myName" /> <input type="submit" value="Say hello!" /> </form>
рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ {...} рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ Play рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Application.sayHello рдкрд░ рдПрдХ URL рдмрдирд╛рддрд╛ рд╣реИред рдЕрдм, рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЛрдордкреЗрдЬ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░реЗрдВред
![](https://habrastorage.org/storage/d3e205f0/06ff3dbb/f4c3405a/d7c58a32.png)
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ nonexistent Application.sayHello рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣реЗ рд╣реИрдВред рдЖрдЗрдП рдЗрд╕реЗ helloworld / app / рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / Application.java рдореЗрдВ рдмрдирд╛рдПрдВ:
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } public static void sayHello(String myName) { render(myName); } }
рд╣рдордиреЗ SayHello рдкрджреНрдзрддрд┐ рдореЗрдВ myName рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди myName рдХреЗ рд╕рд╛рде рдкреЙрдкреНрдпреБрд▓реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдо myName рдХреЛ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдбрд░ () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
![](https://habrastorage.org/storage/a1588456/b7709dd4/0c56b55d/f6446724.png)
рдЕрдм, рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА:
![](https://habrastorage.org/storage/c74f6c24/33aaa4f1/44337757/db50956d.png)
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдкреНрд▓реЗ рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдмрдирд╛рдПрдВ helloworld / app / views / Application / sayHello.html:
#{extends 'main.html' /} #{set title:'Home' /} <h1>Hello ${myName ?: 'guest'}!</h1> <a href="@{Application.index()}">Back to form</a>
рдЕрдм рдкреЗрдЬ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░реЗрдВред
![](https://habrastorage.org/storage/b1118264/3135dfa3/9a23f450/ac5a2e44.png)
рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЧреНрд░реВрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ ?: рдСрдкрд░реЗрдЯрд░ред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ myName рд╡реИрд░рд┐рдПрдмрд▓ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд┐рдП рдмрд┐рдирд╛ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ 'рд╣реИрд▓реЛ рдЧреЗрд╕реНрдЯ' рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕реАрдПрдирд╕реА рд╕реЗрдЯрд┐рдВрдЧ
рдпрджрд┐ рдЖрдк рдмрдирд╛рдП рдЧрдП рдкреГрд╖реНрда рдХрд╛ URL рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
http: // localhost: 9000 / рдПрдкреНрд▓рд┐рдХреЗрд╢рди / Sayhello? myName = guillaume
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Play рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
* /{controller}/{action} {controller}.{action}
рд╣рдо рдХрд╕реНрдЯрдо Application.sayHello рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда URL рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП helloworld / conf / рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
GET /hello Application.sayHello
рдЕрдм рдлреЙрд░реНрдо рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдирд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдиреБрдХреВрд▓рди
рдЪреВрдВрдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ main.html рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдмрджрд▓рд┐рдП helloworld / app / views / main.html:
... <body> The Hello world app. <hr/> #{doLayout /} </body> ...
рд▓рд╛рдЗрди "рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред" рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
![](https://habrastorage.org/storage/b8078b8d/6cd7acef/15bf44b2/6b0e832c.png)
рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди
рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВред рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлреЙрд░реНрдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Play рд╕рддреНрдпрд╛рдкрди рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рд╡рд░реНрддрдирд╣реЗрд▓реЛ рдХреЛ рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб / рдПрдк / рдХрдВрдЯреНрд░реЛрд▓рд░ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди.рдЬрд╛рд╡ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВ:
... public static void sayHello(@Required String myName) { if(validation.hasErrors()) { flash.error("Oops, please enter your name!"); index(); } render(myName); } ...
Play.data.validation рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред * @ рдЕрд╕рдорд╛рди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ myName рдлрд╝реАрд▓реНрдб рднрд░рд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рд╡рд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░, рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдЗрдЯ рдХреЗ рд░реВрдЯ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдкрд░ рдлрд╝реНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдм рдЖрдкрдХреЛ рдмрд╕ рдПрд░рд░ рдореИрд╕реЗрдЬ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реИ рддреЛред рдмрджрд▓рд┐рдП helloworld / app / views / Application / index.html:
#{extends 'main.html' /} #{set title:'Home' /} #{if flash.error} <p style="color:#c00"> ${flash.error} </p> #{/if} <form action="@{Application.sayHello()}" method="GET"> <input type="text" name="myName" /> <input type="submit" value="Say hello!" /> </form>
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
![](https://habrastorage.org/storage/9f9d1be9/e3ab5a6a/edab47f6/a2c554e3.png)
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдХрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЦрддреНрдо рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреЗрд╕реНрдЯ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
$ play test
рдкреНрд▓реЗ рдЯреЗрд╕реНрдЯ рдХрдорд╛рдВрдб рдкреНрд▓реЗ рд░рди рдХреЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЯреЗрд╕реНрдЯ рд░рдирд░ рдореЙрдбреНрдпреВрд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реАрдзреЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд┐рдореНрди рдкрддрд╛ рдЦреЛрд▓реЗрдВ http: // localhost: 9000 / @ рдкрд░реАрдХреНрд╖рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд╕рдм рдХреБрдЫ рд╣рд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ... рд▓реЗрдХрд┐рди рдпреЗ рдорд╛рдирдХ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
![](https://habrastorage.org/storage/ec7ffc89/77cd1e44/1acf2c3e/372b8563.png)
рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдЖрдорддреМрд░ рдкрд░ рдПрдХ HTML рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдереЛрдбрд╝рд╛ рдердХрд╛рдК рд╣реИ (HTML рддрд╛рд▓рд┐рдХрд╛ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг)ред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓реЗ рдЖрдкрдХреЛ рдкреНрд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреЛ рд╕реЗрд▓реЗрдирд┐рдпрдо рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕рд╣рд┐рдд рдкреНрд▓реЗ рдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдПред рдУрдкрди рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб / рдЯреЗрд╕реНрдЯ / Application.test.html:
*{ You can use plain selenium command using the selenium tag }* #{selenium} // Open the home page, and check that no error occurred open('/') assertNotTitle('Application error') #{/selenium}
рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдмрд╕ рдореБрдЦреНрдп рдкреГрд╖реНрда рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд╛рда 'рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреНрд░реБрдЯрд┐' рдирд╣реАрдВ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ:
#{selenium} // , open('/') assertNotTitle('Application error') // assertTextPresent('The Hello world app.') // clickAndWait('css=input[type=submit]') // assertTextPresent('Oops, please enter your name!') // type('css=input[type=text]', 'bob') clickAndWait('css=input[type=submit]') // assertTextPresent('Hello bob!') assertTextPresent('The Hello world app.') // clickAndWait('link=Back to form') // ? assertTextNotPresent('Hello bob!') #{/selenium}
рд╣рдордиреЗ рдЖрд╡реЗрджрдиреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдмрд╕ рдЯреЗрд╕реНрдЯ рд░рдирд░ рдореЗрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рдкреНрд░рд╛рд░рдВрдн" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╕рдм рдХреБрдЫ рд╣рд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!
![](https://habrastorage.org/storage/ee12899f/8dcff003/0119cf0e/ae0bc373.png)
рдФрд░ рдЪрд╛рд╣рд┐рдП?
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкрд╛рда рдерд╛ред рдпрджрд┐ рдЖрдк Play рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ "рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рдкреНрд▓реЗ рдЧрд╛рдЗрдб, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд░рдг-рджрд░-рдЪрд░рдг" рдкрдврд╝реЗрдВред