Я хотел бы знать, возможно ли получить содержимое атрибута, расположенного в DOM, и сохранить его как переменную в классе java (класс, который соответствует странице на веб-сайте в соответствии с подходом POM), используя PageFactory из Selenium (@НайтиПо). Затем мне нужно будет использовать эту переменную в другом классе, который соответствует другой странице на том же веб-сайте (объектная модель страницы). Есть ли какие-то примеры и методы, которые кто-то может предоставить? У меня нет кода для представления. Мне просто интересно, возможно ли это технически и как.
----РЕДАКТИРОВАТЬ 1---- В соответствии с просьбой, некоторый код для объяснения. Ниже приведен атрибут в DOM
<label id="HouseNumberVersion">HOUSE N° x </label>
Например, я нахожу этот элемент DOM с помощью PageFactory из Selenium и получаю его содержимое; следующий подход POM (поэтому он называется Page1)
public class Page1 {
WebDriver driver;
@FindBy (xpath="//*[@id="HouseNumberVersion"]")
WebElement houseNumber;
public Page1(WebDriver driver){
PageFactory.initElements(driver, this);
this.driver = driver;
}
public Page1(){
}
public void assertEquals(){
String actual = houseNumber.getAttribute("innerHTML");
//some code here to assert this is equal
// to another string but not this method is not needed it's just to show that
// i can use this string in this page properly using this method
}
public String getHouse(){
String actual = houseNumber.getAttribute("innerHTML");
return actual;
}
}
Теперь я хотел бы вызвать и использовать строку actual
в моем другом классе, которая соответствует другой странице на веб-сайте.
public class Page2 {
WebDriver driver;
//i search for an element in this second page which is an input
@FindBy (xpath="//*[@id="HouseInput"]")
WebElement houseInput;
public Page2(WebDriver driver){
PageFactory.initElements(driver, this);
this.driver = driver;
}
public void sendActualToInput(){
// i created an object to recover the string within the return method in
// Page1
Page1 p = new Page1();
String number = p.getHouse();
//i send this string recovered from the other
// to another string
houseInput.sendKeys(number);
}
}
И, наконец, я вызываю метод sendActualToInput
со страницы 2 в моем основном тестовом сценарии следующим образом.
public class MyTest (){
public WebDriver driver;
// some Before Method here ..
@Test
Public void CheckHouse(){
Page2 p2Object = new Page2(driver);
p2Object.sendActualToInput();
//some others actions here..
}
}
Я пробовал это, но я получил ошибку java.lang.NullPointerException
. Консоль Eclipse ссылается на строку String actual = houseNumber.getAttribute("innerHTML");
Кажется, что методу sendActualToInput
на странице 2 ничего не возвращается. Потому что, если я помещу sysout в этот метод sendActualToInput
, он распечатает содержимое этого sysout в консоли.
Это управляемо?
------EDIT2--------
Я инициализировал свои поля в своем коде. Я просто забыл добавить их во фрагмент, но теперь функции инициализации находятся в коде. И проблема все еще происходит.