Selenium 页面对象模型,如何将变量从一页 class 传递到另一页?

Selenium page object model, how to pass variable from one page class to another?

我想看看是否有办法将变量从一个页面对象传递到另一个页面对象?我正在为我的 java 项目使用 Serenity BDD 框架。在一个页面上,我正在创建和命名一个项目,然后我转到另一个页面,我试图在该页面上找到该项目,例如在 table 中。我 运行 遇到一个问题,我在第二页上调用的变量是 null.

每个页面都有自己的页面class,这是示例代码:

public class Page1 extends PageObject{
String itemName;
private String savedItemName;

public String getSavedItemName(){
     return savedItemName;
}

public String createItemAndNameIt(){
     //some action to create an item
     //some action to save the item with a given name
     //assigned from itemName which is fed from environment variable

     savedItemName = itemName;
     return itemName;
}

}

下一步是我的代码进入下一页并调用 savedItemName 变量。

public class Page2 extends PageObject{

Page1 page1Steps = New Page1();
String recoveredItemName;


public void searchForItem{
     //perform some action to get a list of items
     //calling a function that searches page for item
     //which accepts element to search and string to search for
    searchForElement(webElement,page1Steps.getSavedItemName());

}

}

当我调用 page1Steps.getSavedItemName() 时 returns null。我怀疑在页面之间切换时罪魁祸首可能是 webdriver,新页面无法访问上一页中保存的值?正在寻找有关如何成功执行此操作的任何建议。

public **String** createItemAndNameIt(){
     //some action to create an item
     //some action to save the item with a given name
     //assigned from itemName which is fed from environment variable

     savedItemName = itemName;
     return itemName;
}

您的 setter 方法没有 return 类型。

同样在第 2 页 class 您的方法没有正确的签名和 return 类型。不知道你是怎么没有得到编译错误的。

在 John Ferguson 的帮助下,使用以下方法可以轻松解决此问题:

     Serenity.setSessionVariable("customerName").to("Jim”);
     String customerName = sessionVariableCalled("customerName”);

使用剧本模式时,您可以remeber/recall这些东西:

actor.remember("itemName", "someItem")
actor.recall("itemName"

)