【发布时间】:2015-07-31 15:00:18
【问题描述】:
尝试使用 Appium 在移动自动化中使用时遇到异常。虽然它非常适合 Web 测试自动化。
*Given The app is opened # CommonSteps.OpenApp()
Then I should see "Skip button" on welcome screen # WelcomeScreenSteps.CheckElementPresent(String)
cucumber.runtime.CucumberException: Failed to instantiate class steps.WelcomeScreenSteps
at cucumber.runtime.java.DefaultJavaObjectFactory.cacheNewInstance(DefaultJavaObjectFactory.java:40)
at cucumber.runtime.java.DefaultJavaObjectFactory.getInstance(DefaultJavaObjectFactory.java:26)
at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:37)
at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
at cucumber.runtime.Runtime.runStep(Runtime.java:298)
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:48)
at cucumber.runtime.model.CucumberFeature.run(CucumberFeature.java:163)
at cucumber.runtime.Runtime.run(Runtime.java:120)
at cucumber.api.cli.Main.run(Main.java:36)
at cucumber.api.cli.Main.main(Main.java:18)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at cucumber.runtime.java.DefaultJavaObjectFactory.cacheNewInstance(DefaultJavaObjectFactory.java:34)
... 11 more
Caused by: java.lang.RuntimeException: java.lang.InstantiationException: pages.Pages
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:136)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:66)
at steps.WelcomeScreenSteps.<init>(WelcomeScreenSteps.java:16)
... 16 more
Caused by: java.lang.InstantiationException: pages.Pages
at java.lang.Class.newInstance(Unknown Source)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:133)
... 18 more*
我们可以在 Appium Mobile 自动化中使用 PageFactory.initElements 吗?
功能文件:
Feature: As a user, I want to open the app when not logged in and check the welcome screens
@TestTag
Scenario: Open app when not logged in and check 3 welcome screens using swipes
Given The app is opened
Then I should see "Skip button" on welcome screen
步骤文件:
public class WelcomeScreenSteps extends DriverStore {
// WebDriver driver = new FirefoxDriver();
Pages pages = PageFactory.initElements(driver, Pages.class);
//WelcomeSreenPage welcomeScreen = new WelcomeSreenPage(driver);
public WelcomeScreenSteps() {
// System.out.println("I am in Welcome Constructor");
}
@Given("^the app is open$")
public void the_app_is_open() throws Throwable {
// Code to open the app
System.out.println("in the step");
}
@Then("^I should see \"(.*?)\" on welcome screen$")
public void CheckElementPresent(String identifire) {
Assert.assertTrue(pages.welcomeScreen.checkElementPresent(identifire));
}
Pages.java
public class Pages {
/*AppiumDriver driver;*/
static AppiumDriver driver;
public WelcomeSreenPage welcomeScreen = PageFactory.initElements(driver, WelcomeSreenPage.class);
/*public Pages(AppiumDriver driver) {
this.driver = driver;
}*/
public Pages(AppiumDriver driver) {
Pages.driver = driver;
}
public WelcomeSreenPage welcomeScreen() {
welcomeScreen = new WelcomeSreenPage(driver);
return welcomeScreen;
}
}
WelcomeScreenPage.java
public class WelcomeSreenPage {
// all mobile element identifier here
// WebDriver driver;
AppiumDriver driver;
public boolean checkElementPresent(String identifire) {
MobileElement element = actions.getElement(mapElement(identifire),
driver);
if (element != null)
return true;
else
return false;
}
【问题讨论】:
-
能否提供代码sn-p和异常堆栈?
-
我已经用代码 sn-p 和异常堆栈更新了我的描述
标签: android selenium selenium-webdriver cucumber appium