1
+ package com.demo.pages.registration
2
+
3
+ import com.codeborne.selenide.Condition.exist
4
+ import com.codeborne.selenide.Condition.visible
5
+ import com.codeborne.selenide.Selectors.byText
6
+ import com.codeborne.selenide.Selenide .`$`
7
+ import com.codeborne.selenide.SelenideElement
8
+ import com.demo.objects.client.ClientData
9
+ import com.demo.pages.common.DatePicker
10
+ import com.demo.pages.registration.StepName.STEP_2Name
11
+ import io.qameta.allure.Step
12
+ import org.springframework.beans.factory.annotation.Autowired
13
+ import org.springframework.stereotype.Component
14
+ import java.time.LocalDate
15
+
16
+ @Component
17
+ class RegistrationStep2 {
18
+ private val firstnameField: SelenideElement = `$`(" #first_name" )
19
+ private val lastnameField: SelenideElement = `$`(" #last_name" )
20
+ private val phoneNumberField: SelenideElement = `$`(" [data-label=\" Phone\" ]" )
21
+ private val dateOfBirthField: SelenideElement = `$`(" [id*=date_box] .input-wrapper" )
22
+ private val countryField: SelenideElement = `$`(" [data-label=\" Country\" ]" )
23
+ private val genderOptionWrapper: SelenideElement = `$`(" [id*=radio].form-row" )
24
+
25
+ @Autowired
26
+ private lateinit var registration: RegistrationCommon
27
+
28
+ @Autowired
29
+ private lateinit var datePicker: DatePicker
30
+
31
+ @Step(" Provide data for 2nd step" )
32
+ fun `do step 2` (client : ClientData ) {
33
+ `wait while ready`()
34
+ `fill firstname`(client.firstname)
35
+ `fill lastname`(client.lastname)
36
+ `select gender`(client.gender)
37
+ `fill phone number`(client.phoneNumber)
38
+ `select country`(client.country)
39
+ registration.`click Next button`()
40
+ }
41
+
42
+ @Step(" Wait for Step 2 elements ready" )
43
+ private fun `wait while ready` () {
44
+ registration.`wait for step readiness`(STEP_2Name )
45
+ firstnameField.shouldBe(visible)
46
+ lastnameField.shouldBe(visible)
47
+ genderOptionWrapper.should(exist)
48
+ phoneNumberField.shouldBe(visible)
49
+ }
50
+
51
+ @Step(" Fill firstname: {firstname}" )
52
+ private fun `fill firstname` (firstname : String ) {
53
+ firstnameField.`val `(firstname)
54
+ }
55
+
56
+ @Step(" Fill firstname: {firstname}" )
57
+ private fun `fill lastname` (lastname : String ) {
58
+ lastnameField.`val `(lastname)
59
+ }
60
+
61
+ @Step(" Select gender: {gender}" )
62
+ private fun `select gender` (gender : String ) {
63
+ `gender radio element`(gender)
64
+ .shouldBe(visible)
65
+ .click()
66
+ }
67
+
68
+ @Step(" Fill phone number: {phoneNumber}" )
69
+ private fun `fill phone number` (phoneNumber : String ) {
70
+ phoneNumberField.`val `(phoneNumber)
71
+ }
72
+
73
+ @Step(" Select birth date: {birthDate}" )
74
+ private fun `select date of birth` (birthDate : LocalDate ) {
75
+ dateOfBirthField.shouldBe(visible).click()
76
+ datePicker.`select year`(birthDate)
77
+ datePicker.`select month`(birthDate)
78
+ datePicker.`select day`(birthDate)
79
+ }
80
+
81
+ @Step(" Select country: {country}" )
82
+ private fun `select country` (countryName : String ) {
83
+ countryField.shouldBe(visible).click()
84
+ `$`(byText(countryName)).click()
85
+ }
86
+
87
+ private fun `gender radio element` (gender : String ): SelenideElement {
88
+ return `$`(" [value=${gender} ]" )
89
+ }
90
+ }
0 commit comments