如何在JBehave的许多PageObjects中使用变量?

Twa*_*gas 1 java selenium webdriver jbehave pageobjects

例如:

Scenario:
Given the pageOne page
When I get pageOneTitle
And click the first menu item
And I get the pageTwoTitle
Then pageOneTitle is not equals pageTwoTitle
Run Code Online (Sandbox Code Playgroud)

我有两个课程.每页一个.

  • PageOneSteps
  • PageTwoSteps

该场景的前三个步骤在PageOneSteps中,另一个在PageTwoSteps中.这意味着,pageTitleOne保存在PageOneSteps中.验证步骤然后pageOneTitle不等于PageTwoStele中的pageTwoTitle.

如果PageOneSteps中的pageOneTitle,我如何在PageTwoSteps中等于pageOneTitle和pageTwoTitle?

这是一个非常简单的例子.但我希望它能说明我的意思.

感谢您的支持!

Rol*_*and 5

在执行故事时,您可以使用上下文来放置多个StepClasses所需的对象/值.这可以使用ThreadLocal实现.使用这样的上下文,您可以简单地将第二步中获得的值放入上下文中,并在第五步中再次获取它,以便进行比较.可以轻松找到如何使用ThreadLocal的示例 - 例如此处.

也许最简单的例子如下(有关更多信息,请参阅上面的链接页面).

故事:

Scenario: store and load a value
When I store the value asdf
Then the value is asdf
Run Code Online (Sandbox Code Playgroud)

类上下文:

public class Context {
    private String data;
    // getData(), setData(), ...
}
Run Code Online (Sandbox Code Playgroud)

MyThreadLocal类:

public class MyThreadLocal {
    static final class ContextLocal extends ThreadLocal<Context> {
        @Override
        protected Context initialValue() {
            return new Context();
        }
    }

    private static final ThreadLocal<Context> userThreadLocal = new ContextLocal();

    public static Context get() {
        return userThreadLocal.get();
    }
}
Run Code Online (Sandbox Code Playgroud)

步骤类:

public class SomeSteps extends Steps {
    @When("I store the value $value")
    public void storeValue(String value) {
        MyThreadLocal.get().setData(value);
    }
}

public class SomeOtherSteps extends Steps {
    @Then("the value is $value")
    public void checkValue(String value) {
        assertEquals(value, MyThreadLocal.get().getData());
    }
}
Run Code Online (Sandbox Code Playgroud)

在类Context中,您可以使用更精细的方式来存储数据,例如Map.