Skip to content

Commit 3d70cab

Browse files
committed
refactor
1 parent ec481ec commit 3d70cab

File tree

10 files changed

+287
-142
lines changed

10 files changed

+287
-142
lines changed

src/main/kotlin/com/demo/objects/user/ClientDTO.kt src/main/kotlin/com/demo/objects/client/ClientDTO.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demo.objects.user
1+
package com.demo.objects.client
22

33
import io.github.serpro69.kfaker.Faker
44
import mu.KotlinLogging
@@ -18,11 +18,11 @@ class ClientDTO {
1818
password = id,
1919
firstname = "John",
2020
lastname = "Doe",
21-
gender = "male",
21+
gender = "Male",
2222
dateOfBirth = faker.person.birthDate(45),
2323
phoneNumber = "4551689500",
2424
country = "Canada",
25-
aboutText = faker.bigBangTheory.quotes()
25+
aboutYou = faker.bigBangTheory.quotes()
2626
)
2727
logger.info { "New user data: $clientData" }
2828
return clientData

src/main/kotlin/com/demo/objects/user/ClientData.kt src/main/kotlin/com/demo/objects/client/ClientData.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demo.objects.user
1+
package com.demo.objects.client
22

33
import java.time.LocalDate
44

@@ -12,5 +12,5 @@ data class ClientData(
1212
val phoneNumber: String,
1313
val dateOfBirth: LocalDate,
1414
val country: String,
15-
val aboutText: String
15+
val aboutYou: String
1616
)

src/main/kotlin/com/demo/pages/Registration.kt

-118
This file was deleted.

src/main/kotlin/com/demo/pages/common/DatePicker.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.codeborne.selenide.Selenide.`$`
77
import com.codeborne.selenide.Selenide.`$$`
88
import com.codeborne.selenide.SelenideElement
99
import org.springframework.stereotype.Component
10+
import java.time.LocalDate
1011

1112
@Component
1213
class DatePicker {
@@ -34,26 +35,27 @@ class DatePicker {
3435
dayContainer.shouldBe(visible)
3536
}
3637

37-
fun `select year`(year: String) {
38+
fun `select year`(date: LocalDate) {
39+
val year = date.year.toString()
3840
`validate year picker readiness`()
3941
while (yearPicker.`$`(currentYear).`val`()?.compareTo(year) != 0) {
4042
yearPicker.`$`(previousYear).click()
4143
}
4244
}
4345

44-
fun `select month`(month: String) {
46+
fun `select month`(date: LocalDate) {
4547
`wait while ready`()
4648
monthPicker.click()
47-
`$`(byText(month.lowercase().replaceFirstChar(Char::titlecase)))
49+
`$`(byText(date.month.toString().lowercase().replaceFirstChar(Char::titlecase)))
4850
.click()
4951
}
5052

51-
fun `select day`(day: String) {
53+
fun `select day`(date: LocalDate) {
5254
`wait while ready`()
5355
dayCollection
5456
.filterNot { it.has(cssClass(previousMonthDay)) || it.has(cssClass(nextMonthDay)) }
5557
.first {
56-
it.text().contentEquals(day)
58+
it.text().contentEquals(date.dayOfMonth.toString())
5759
}
5860
.click()
5961
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.demo.pages.registration
2+
3+
import com.codeborne.selenide.Condition.*
4+
import com.codeborne.selenide.Selenide.`$`
5+
import com.codeborne.selenide.SelenideElement
6+
import org.springframework.stereotype.Component
7+
8+
@Component
9+
class RegistrationCommon {
10+
private val header: SelenideElement = `$`("#main h1")
11+
private val stepBar: SelenideElement = `$`(".user-registration-multi-part--steps-list")
12+
private val activeStep: String = ".active"
13+
private val nextButton: SelenideElement = `$`("[data-action=\"next\"]")
14+
private val submitButton: SelenideElement = `$`(".ur-button-container [type=\"submit\"]")
15+
16+
fun `wait for step readiness`(step: StepName) {
17+
`wait while commons ready`()
18+
stepBar.`$$`(activeStep)
19+
.last()
20+
.shouldHave(text(step.text))
21+
}
22+
23+
fun `click Next button`() {
24+
`wait while commons ready`()
25+
nextButton.shouldBe(visible, enabled).click()
26+
}
27+
28+
fun `click Submit button`() {
29+
`wait while commons ready`()
30+
submitButton.shouldBe(visible, enabled).click()
31+
}
32+
33+
private fun `wait while commons ready`() {
34+
header.shouldBe(visible)
35+
.shouldHave(text("Multi Step Form"))
36+
stepBar.shouldBe(visible)
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.demo.pages.registration
2+
3+
import com.codeborne.selenide.Condition.visible
4+
import com.codeborne.selenide.Selenide
5+
import com.codeborne.selenide.SelenideElement
6+
import com.demo.objects.client.ClientData
7+
import com.demo.pages.registration.StepName.STEP_1Name
8+
import io.qameta.allure.Step
9+
import org.springframework.beans.factory.annotation.Autowired
10+
import org.springframework.stereotype.Component
11+
12+
@Component
13+
class RegistrationStep1 {
14+
private val usernameField: SelenideElement = Selenide.`$`("#user_login")
15+
private val emailField: SelenideElement = Selenide.`$`("#user_email")
16+
private val passwordField: SelenideElement = Selenide.`$`("#user_pass")
17+
private val confirmPasswordField: SelenideElement = Selenide.`$`("#user_confirm_password")
18+
19+
@Autowired
20+
private lateinit var registration: RegistrationCommon
21+
22+
@Step("Provide data for 1st step")
23+
fun `do step 1`(client: ClientData) {
24+
`wait while ready`()
25+
`fill username`(client.username)
26+
`fill email`(client.email)
27+
`fill password`(client.password)
28+
`confirm password`(client.password)
29+
registration.`click Next button`()
30+
}
31+
32+
@Step("Wait for Step 1 elements ready")
33+
private fun `wait while ready`() {
34+
registration.`wait for step readiness`(STEP_1Name)
35+
usernameField.shouldBe(visible)
36+
emailField.shouldBe(visible)
37+
passwordField.shouldBe(visible)
38+
confirmPasswordField.shouldBe(visible)
39+
}
40+
41+
@Step("Fill username: {username}")
42+
private fun `fill username`(username: String) {
43+
usernameField.`val`(username)
44+
}
45+
46+
@Step("Fill email: {email}")
47+
private fun `fill email`(email: String) {
48+
emailField.`val`(email)
49+
}
50+
51+
@Step("Fill password: {password}")
52+
private fun `fill password`(password: String) {
53+
passwordField.`val`(password)
54+
}
55+
56+
@Step("Confirm password: {password}")
57+
private fun `confirm password`(password: String) {
58+
confirmPasswordField.`val`(password)
59+
}
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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

Comments
 (0)