Объектная модель страницы Selenium, как передать переменную из одного класса страницы в другой? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь узнать, есть ли способ передать переменную из одного объекта страницы в другой? Я использую инфраструктуру Serenity BDD для моего проекта java. На одной странице я создаю и называю элемент, а затем я go перехожу на другую страницу, где я пытаюсь найти этот элемент, например, в таблице. Я сталкиваюсь с проблемой, когда переменная, которую я вызываю на второй странице: null .

Каждая страница имеет свой собственный класс страницы, и это пример кода:

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;
}

}

Следующий шаг - мой код переходит на следующую страницу и вызывает переменную saveItemName .

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 () , который возвращает ноль . Я подозреваю, что виновником может быть веб-драйвер при переключении между страницами, значение, которое было сохранено на предыдущей странице, не доступно для новой страницы? Ищите любые советы о том, как сделать это успешно.

Ответы [ 3 ]

1 голос
/ 02 апреля 2020
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;
}

Ваш метод установки не имеет типа возврата.

Также в классе Page2 ваш метод не имеет правильной сигнатуры и возвращаемого типа. Не уверен, как вы не получили ошибку компиляции.

0 голосов
/ 03 апреля 2020

При использовании шаблона сценария вы можете запомнить / вспомнить эти вещи:

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

)

0 голосов
/ 03 апреля 2020

С помощью Джона Фергюсона это легко решить с помощью следующего:

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