рдХрдИ рдиреЗ
рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ - рд╕реНрд╡реАрдХреГрддрд┐ / рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред

рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдореЗрдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ рд╣реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рдерд╛, рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЧрд┐рд░реЗ рд╣реБрдП рдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдВ, рдЖрджрд┐ред (
рдкреНрд░реВрдлрд╝рд▓рд┐рдВрдХ )ред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЗрд╕ рджреЛрд╣рд░рд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП
рд╕реЗрд▓реЗрдирд╛рдЗрдб рдХрд╛
рдЬрдиреНрдо рд╣реБрдЖ ред
рд╕реЗрд▓реЗрдирд╛рдЗрдб рдХреНрдпрд╛ рд╣реИ
рд╕реЗрд▓реЗрдирд┐рдпрдо рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрджреНрд░рд╡ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдиреНрдпреВрдирддрдо рд╣реИред рдЬрд┐рд╕реЗ "рдУрдкрди" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рд╛ рдЧрдпрд╛ред
@Test public void testLogin() { open("/login"); $(By.name("user.name")).sendKeys("johny"); $("#submitButton").click(); waitUntil(By.id("username"), hasText("Hello, Johny!")); $("#username").shouldHave(cssClass("green-text")); assertThat($("#insuranceDetailsHeader").getText(), equalTo(" ")); assertThat($$("#paymentScheduleTable tr").size(), equalTo(7)); }
рдЬрдм рдЦреБрд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдЦреБрдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдЦреЛрд▓рддрд╛ рд╣реИ: 8080 / рд▓реЙрдЧрд┐рди рдкреЗрдЬ (рдмрдВрджрд░рдЧрд╛рд╣ рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ)ред рдФрд░ рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рдПред
рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд▓рд┐рд╕ рд╕реЗрд▓реЗрдирд╛рдЗрдб
рд╕реЗрд▓реЗрдирд╛рдЗрдб рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдЯреАрдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рдХреЛ рд╕рд╛рдл рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЖрджрд┐ред
@Test public void canFillComplexForm() { open("/client/registration"); setValue(By.name("user.name"), "johny"); selectRadio("user.gender", "male"); selectOption(By.name("user.preferredLayout"), "plain"); selectOptionByText(By.name("user.securityQuestion"), "What is my first car?"); followLink(By.id("submit")); takeScreenShot("complex-form.png"); } @Before public void clearCache() { clearBrowserCache(); }
рдФрд░ рдЕрдЬрд╛рдХреНрд╕ рдкреНрд░рд╢реНрди рдЕрд▓рдЧ рдЦрдбрд╝рд╛ рд╣реИ: рдЬрдм рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рдХреЛрдб рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ (рдЬрдм рдмрдЯрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╕реЗрд▓реЗрдирд╛рдЗрдб рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
@Test public void pageUsingAjax() { waitFor("#username"); waitUntil("#username", hasText("Hello, Johny!")); waitUntil("#username", hasAttribute("name", "user.name")); waitUntil("#username", hasClass("green-button")); waitUntil("#username", hasValue("Carlson")); waitUntil("#username", appears); waitUntil("#username", disappears); }
рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ?
1. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:
<dependency> <groupId>com.codeborne</groupId> <artifactId>selenide</artifactId> <version>1.6</version> </dependency>
2. рд╡рд░реНрдЧреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ:
include static com.codeborne.selenide.Navigation.* include static com.codeborne.selenide.DOM.*
рд╣реЛ рдЧрдпрд╛! рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВ, рдПрдбреНрд░реЗрди-рд▓реЛрдл!
рдХреНрдпрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?
рд╣рд╛рдВ, рд╣рдо
рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдХрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
- Java + ANT + JUnit
- рдЬрд╛рд╡рд╛ + рдЧреНрд░реЗрдбрд▓ + рдЬреБрдиреАрдд
- рд╕реНрдХрд╛рд▓рд╛ + рдПрдПрдирдЯреА + рд╕реНрдХреИрд▓реЗрд╕реНрдЯ
рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрдЪреНрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рдВрджрд░реНрдн рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рд╣реИ рдЬреЛ рд╕реЗрд▓реЗрдирд╛рдЗрдб: рдж
рд╣реИрдВрдЧрдореИрди рдЧреЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдирд╛рдо рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИ - рд╕реЗрд▓реЗрдирд╛рдЗрдб?
рд╕реЗрд▓реЗрдирд┐рдпрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдПрдХ рд░рд╛рд╕рд╛рдпрдирд┐рдХ рддрддреНрд╡ (рд╕реЗрд▓реЗрдирд┐рдпрдо) рд╕реЗ рдЗрд╕рдХрд╛ рдирд╛рдо рд▓рд┐рдпрд╛ред рдФрд░ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рдпреМрдЧрд┐рдХ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ:
- рд╕реЗрд▓реЗрдирд╛рдЗрдб = рд╕реЗрд▓реЗрдирд┐рдпрдо + рдЬреБрдиреАрдЯ
- рд╕реЗрд▓реЗрдирд╛рдЗрдб = рд╕реЗрд▓реЗрдирд┐рдпрдо + рдЯреЗрд╕реНрдЯрдПрдирдЬреА
- рд╕реЗрд▓реЗрдирд╛рдЗрдб = рд╕реЗрд▓реЗрдирд┐рдпрдо + рд╕реНрдХреЗрд▓реЗрд╕реНрдЯ
- рд╕реЗрд▓реЗрдирд╛рдЗрдб = рд╕реЗрд▓реЗрдирд┐рдпрдо + рдХреБрдЫ рднреА
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рд░рд╕рд╛рдпрди!
рдпреВрдкреАрдбреА рдорд╛рд░реНрдЪ 2013 рдореЗрдВ, рд╕реЗрд▓реЗрдирд╛рдЗрдб 2.0 рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдмрд╣реБрдд рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реЗрд▓реЗрдирд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рдФрд░ рднреА рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдФрд░ рд╣рдордиреЗ рд░реВрд╕реА рдореЗрдВ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рднреА рд▓реЙрдиреНрдЪ рдХреА:
ru.selenide.org