在具有Cucumber和Page Objects模型的Appium上,此会话不支持定位器策略“名称”

问题描述 投票:0回答:1

我不能让我的代码工作......我正在使用Appium与TestNG和Cucumber

这是我的Base.java

public class Base {
    public AndroidDriver driver;
   }

这是我的Hooks.java

public class Hooks extends Base{

    private Base base;
    public Hooks (Base base) {
        this.base = base;
    }

    @Before("@homeScreenTest")
    public void init() throws MalformedURLException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("no",true);
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
        cap.setCapability("platformVersion", "9");
        cap.setCapability("platformName", "Android");
        cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "60");
        cap.setCapability("noRest", true);
        cap.setCapability("autoGrantPermissions",true);
        cap.setCapability("appPackage","myPackage");
        cap.setCapability("appWaitActivity", "myActivity");

        File f = new File("src");
        File fs = new File(f, "app");

        cap.setCapability(MobileCapabilityType.APP, fs.getAbsolutePath());
        base.driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), cap);
        base.driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
}

这是我的Page Object类LanguageSelect.java

public class LanguageSelect extends Base{

    public Base base;

    public LanguageSelect (Base base) {
       super();
       this.base= base;
       PageFactory.initElements(base.driver,this);
    }

    @AndroidFindBy(xpath = "//android.widget.Button[@text='SET LANGUAGE']")
    public WebElement setLanguage;
}

最后这是我的步骤定义文件LandingScreenTest.java

public class LandingScreenTest extends Base{

    private Base base;
    public LandingScreenTest(Base base){
        this.base = base;
    }
@Then("^I click on button $")
        public void i_click_on_something(String strArg1) throws Throwable {

        LanguageSelect ls = new LanguageSelect(base);
        ls.setLanguage.click();
        }
}

现在按钮根本没有点击,它在那里,它是可见的,如果我在LandingScreenTest.java中写这个,它的工作原理

WebElement setLng = base.driver.findElementByXPath("//android.widget.Button[@text='SET LANGUAGE']");
        setLng.click();

但是,如果我尝试使用页面对象,我会得到

"org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session"

有时甚至没有驱动程序没有初始化。我已经挖掘了整个stackoverflow和大量的教程,但我只是无法做到正确。

我将Base.java中的代码与Hooks.java中的代码分开的原因是因为Cucumber不允许我使用注释扩展类。

我错过了什么?请帮忙

注意:我没有发布跑步者类和特征文件,除了我尝试从页面对象类中获取对象之外,一切都有效。

java cucumber appium pageobjects
1个回答
0
投票

我已经设法让它工作了。所以基本上在LanguageSelect类而不是

public class LanguageSelect extends Base{

    public Base base;

    public LanguageSelect (Base base) {
       super();
       this.base= base;
       PageFactory.initElements(base.driver,this);
    }

我写了这个


public class LanguageSelect extends Base{

    public LanguageSelect (AndroidDriver driver) {
       this.driver = driver;
       PageFactory.initElements(new AppiumFieldDecorator(driver),this);
    }

它完美无缺,其他类中的其他所有内容都完全相同

© www.soinside.com 2019 - 2024. All rights reserved.