Hi everyone.
We are doing some POC work trying to see if we can use Geb along with Cucumber and Appium to write and execute tests for Native apps.
So far I am a bit confused on how I would be able to do this. Does anyone have any experience with this that may be able to help?
Here is an example of my screen or page
package com.page
import geb.Page
import org.openqa.selenium.By
class LRLoginScreen extends Page {
static at = {
signIn.text() == "Sign In"
}
/*Elements locator */
static content = {
signIn { $(By.name('signInButton')) }
email { $(By.name('emailTextField')).firstElement() }
accessCode { $(By.name('accessCodeTextField')).firstElement() }
resendAccessButton { $(By.name('resendAccessButton')) }
ccLogo { $(By.name('ccLogoImage')) }
}
void clickSendAccessCode(){
waitFor { resendAccessButton.isDisplayed() }
resendAccessButton.click()
}
void setEmail(emailAddress){
waitFor { email.isDisplayed() }
email.click()
if (email.text == "Email Address") {
email.sendKeys(emailAddress)
} else {
email.clear()
email.sendKeys(emailAddress)
}
}
void setAccessCode(acCode){
waitFor { accessCode.isDisplayed()}
accessCode.click()
if (accessCode.text == "Access Code") {
accessCode.sendKeys(acCode)
} else {
accessCode.clear()
accessCode.sendKeys(acCode)
}
}
void clickSignIn(){
waitFor { signIn.isDisplayed()}
signIn.click()
}
void checkLogo(){
waitFor { ccLogo.isDisplayed()}
ccLogo.isDisplayed()
}
void login(String emailAddress, String acCode){
setEmail(emailAddress)
setAccessCode(acCode)
clickSignIn()
}
And now my stepDef …
`package com.stepDefs
import com.configuration.JsonReader
import com.pages.LRLoginScreen
import com.pages.LRActivateDeviceScreen
import com.pages.LRDashboardScreen
import com.pages.Workflows
import geb.Browser
import static cucumber.api.groovy.EN.*
JsonReader json = new JsonReader()
LRLoginScreen loginScreen = new LRLoginScreen()
/*************************************************
Actions
*************************************************/
When(~"User Signs In") { ->
page.setEmail(json.usersJson.leadGatherer.email)
page.setAccessCode(json.usersJson.leadGatherer.accessCode)
}
Then(~"User is on the Login Screen") { ->
println("i am at login page")
at page
Browser.page.atVerificationResult
}
When(~/^User navigates to Login screen/) { ->
Workflows workflows = new Workflows()
workflows.navigate()
}`
When I run this. I am getting the following error …
`geb.waiting.WaitTimeoutException: condition did not pass in 10.0 seconds (failed with exception)
at geb.waiting.Wait.waitFor(Wait.groovy:138)
at geb.waiting.Wait$waitFor.call(Unknown Source)
at geb.waiting.DefaultWaitingSupport.doWaitFor(DefaultWaitingSupport.groovy:51)
at geb.waiting.DefaultWaitingSupport.this$2$doWaitFor(DefaultWaitingSupport.groovy)
at geb.waiting.DefaultWaitingSupport.waitFor(DefaultWaitingSupport.groovy:38)
at geb.waiting.WaitingSupport$waitFor.call(Unknown Source)
at geb.Page.waitFor(Page.groovy:506)
at geb.Page.waitFor(Page.groovy)
at geb.Browser.methodMissing(Browser.groovy:207)
at geb.Browser.invokeMethod(Browser.groovy)
at com.pages.Workflows$_navigate_closure1.doCall(Workflows.groovy:21)
at com.pages.Workflows$_navigate_closure1.doCall(Workflows.groovy)
at geb.Browser.drive(Browser.groovy:1047)
at geb.Browser$drive$1.callStatic(Unknown Source)
at geb.Browser.drive(Browser.groovy:1017)
at geb.Browser$drive$0.call(Unknown Source)
at com.pages.Workflows.navigate(Workflows.groovy:19)
at com.pages.Workflows$navigate.call(Unknown Source)
at com.stepDefs.LoginPageSteps$_run_closure3.doCall(LoginPageSteps.groovy:51)
at ✽.When User navigates to Login screen(features/login.feature:15)
Caused by: geb.error.UndefinedAtCheckerException: No at checker has been defined for page class geb.Page.
at geb.Page.verifyThisPageAtOnly(Page.groovy:231)
at geb.Page.verifyAt(Page.groovy:182)
at geb.Browser.methodMissing(Browser.groovy:207)
at com.pages.Workflows$_navigate_closure1$_closure4.doCall(Workflows.groovy:21)
at com.pages.Workflows$_navigate_closure1$_closure4.doCall(Workflows.groovy)
at geb.waiting.Wait.waitFor(Wait.groovy:127)
at geb.waiting.Wait$waitFor.call(Unknown Source)
at geb.waiting.DefaultWaitingSupport.doWaitFor(DefaultWaitingSupport.groovy:51)
at geb.waiting.DefaultWaitingSupport.this$2$doWaitFor(DefaultWaitingSupport.groovy)
at geb.waiting.DefaultWaitingSupport.waitFor(DefaultWaitingSupport.groovy:38)
at geb.waiting.WaitingSupport$waitFor.call(Unknown Source)
at geb.Page.waitFor(Page.groovy:506)
at geb.Page.waitFor(Page.groovy)
at geb.Browser.methodMissing(Browser.groovy:207)
at geb.Browser.invokeMethod(Browser.groovy)
at com.pages.Workflows$_navigate_closure1.doCall(Workflows.groovy:21)
at com.pages.Workflows$_navigate_closure1.doCall(Workflows.groovy)
at geb.Browser.drive(Browser.groovy:1047)
at geb.Browser$drive$1.callStatic(Unknown Source)
at geb.Browser.drive(Browser.groovy:1017)
at geb.Browser$drive$0.call(Unknown Source)
at com.pages.Workflows.navigate(Workflows.groovy:19)
at com.pages.Workflows$navigate.call(Unknown Source)
at com.stepDefs.LoginPageSteps$_run_closure3.doCall(LoginPageSteps.groovy:51)
at cucumber.runtime.groovy.GroovyBackend.invoke(GroovyBackend.java:155)
at cucumber.runtime.groovy.GroovyStepDefinition$1.call(GroovyStepDefinition.java:71)
at cucumber.runtime.Timeout.timeout(Timeout.java:13)
at cucumber.runtime.groovy.GroovyStepDefinition.execute(GroovyStepDefinition.java:68)
at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
at cucumber.runtime.Runtime.runStep(Runtime.java:299)
at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
at cucumber.runtime.model.CucumberFeature.run(CucumberFeature.java:165)
at cucumber.runtime.Runtime.run(Runtime.java:121)
at cucumber.api.cli.Main.run(Main.java:36)
at cucumber.api.cli.Main.main(Main.java:18)
`