Как передать значение переменной в объектной модели страницы

Я создаю свой проект с помощью модели объекта страницы,

Чтобы определить простой элемент, проще всего определить

By loginEmailParse = By.id("signIn-email");

и назвать это: driver.findElement(loginEmailParse);

Но когда у нас есть условие с переменной,

By.xpath("//input[@id='" + accountID + "']") И

By.xpath("//input[@id='" + accountID + "']//following::i[@class='far fa-sign-in addPointer']")

Здесь "accountID" является переменной,

Как мы можем это определить?


person Community    schedule 20.07.2018    source источник
comment
Я не совсем уверен, почему у вас есть 2 селектора By.xpath() И By.xpath(), это два элемента или?   -  person Kovacic    schedule 20.07.2018
comment
Это просто пример   -  person    schedule 20.07.2018
comment
Похоже на проблему X-Y. Вместо того, чтобы просить помощи в решении проблемы, отредактируйте свой вопрос и спросите о реальной проблеме. Что ты пытаешься сделать?   -  person DebanjanB    schedule 20.07.2018


Ответы (2)


В этом случае вы не можете создать переменную. вам нужно будет передать xpath внутри метода, в котором вы передаете переменную в качестве параметра.

public void clickElement(String accountID){
driver.findElement(By.xpath("//input[@id='" + accountID + "']")).click();
}
person Karthikeyan R    schedule 20.07.2018

В соответствии с вашим вопросом и приведенным ниже примером кода предположим, что вызов click() для элемента elemA делает другой элемент активным в Дерево DOM, для которого необходимо вызвать WebDriverWait в сочетании с ExpectedConditions следующим образом:

public class LoginPageNew 
{

    WebDriver driver;

    //constructor
    public LoginPageNew(WebDriver loginDriver)
    {
        this.driver=loginDriver;
    }

    @FindBy(id="element1") 
    @CacheLookup
    WebElement elemA;

    public void login_wordpress(String accountID)
    {
        elemA.click();
        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='" + accountID + "']//following::i[@class='far fa-sign-in addPointer']"))).click();
    }
}

Согласно Саймону в обсуждении Как использовать явные ожидания с полями PageFactory и шаблоном PageObject. :

Большинство вещей, поддерживаемых ExpectedConditions, используют либо WebElement, либо локатор. Если вы найдете тот, который этого не делает, то все, что вам нужно сделать, это выяснить, какой локатор использовать. Если вы не использовали аннотацию @FindBy, это либо By.name, либо By.id. Если вы использовали аннотацию, то жизнь довольно проста — она просто есть в коде. В качестве альтернативы не используйте PageFactory для инициализации этого поля, а просто выполните поиск самостоятельно.

Помните, PageFactory существует только для того, чтобы попытаться сэкономить вам некоторый шаблон. Вы всегда можете просто не использовать его там, где он не подходит для вашего конкретного случая использования.

Вывод

Поскольку большинство вещей, поддерживаемых ExpectedConditions, принимают либо WebElement, либо локатор. Если вы не можете найти динамический элемент в качестве альтернативы, не используйте PageFactory для инициализации этого поля, а просто выполните поиск самостоятельно.

person DebanjanB    schedule 20.07.2018
comment
Я думаю, вы неправильно поняли из того, что я ищу. Что мне нужно, так это то, что в каждой верхней части скрипта, если возможно, определить путь WebElement со структурой POM, например, то, что я упомянул в первом примере, возможно. Но когда у нас есть переменная, которая зависит от значений Xpath или веб-элемента, как мы можем указать ее поверх скрипта. - person ; 23.07.2018