Как найти элементы динамически в селене - PullRequest
0 голосов
/ 15 мая 2019

В настоящее время в моем драйвере Firefox, если я хочу найти элемент, я пишу код следующим образом:

WebDriver firefoxDriver = new FirefoxDriver();

...

firefoxDriver.findElement(By.id("testid")).isDisplayed();

or

firefoxDriver.findElement(By.name("testname")).isDisplayed();

or

firefoxDriver.findElement(By.class("testclass")).isDisplayed();

etc

Однако у меня есть эти элементы на отдельной странице, например:

 @FindBy(id = "testid")
    public WebElement testIdElement;

    @FindBy(name = "testname")
    public WebElement testNameElement;

   @FindBy(class = "testclass")
    public WebElement testClassElement;

Я хочу выполнить поиск по моим элементам, как показано ниже, но ниже не работает, потому что он ожидает By:

firefoxDriver.findElement(elementsPage.testIdElement);

or

firefoxDriver.findElement(elementsPage.testNameElement);

or

firefoxDriver.findElement(elementsPage.testClassElement);

Каков будет лучший способ справиться с этим сценарием?Я не хочу продолжать жестко кодировать элементы, вместо этого лучше использовать элементы, которые я уже определил в своем списке элементов.

1 Ответ

1 голос
/ 15 мая 2019

Простой, объявите их как By на этой страницеОбъект:

public By testIdElement = By.id("testid");

public By testNameElement = By.name("testname");

public By testClassElement = By.className("testclass");

затем вызовите их в методе findelements так, как вы хотите:

firefoxDriver.findElement(elementsPage.testIdElement);

firefoxDriver.findElement(elementsPage.testNameElement);

firefoxDriver.findElement(elementsPage.testClassElement);

Мне лично нравится помещать метод driver.findElement в pageObject как лямбда-выражение, чтобы избежать переписывания кода:

что я делаю на C #:

public IWebElement Test => webdriver.FindElement(By.CssSelector("test"));

преобразование в Java:

public WebElement test -> driver.findElement(By.cssSelector("test"));

Итак, написание моего кода было бы примерно так:

page.Test.Click();
page.Test.SendKeys("...");

Поскольку я не люблю использовать элементы в классе Test, я пишу эти методы в объекте страницы (отделяя логику теста от сценария), пример:

    public PageObjectClassExample ShowFilters()
    {
        showFiltersButton.Click();
        return this;
    }
    public PageObjectClassExample ClearAllFilters()
    {
        finalDatePicker.Clear();
        initialDatePicker.Clear();
        searchButton.Click();
        return this;
    }
    public PageObjectClassExample HideShowIssuerColunm()
    {
        ShowHideColumnBtn.Click();
        IssuerColumnCheck.Click();
        KeyColumnCheck.Click();
        ShowHideColumnBtn.Click();
        return this;
    }

и в тестовом файле я бы написал что-то вроде этого:

PageObjectClassExample page = new PageObjectClassExample();
page
    .ShowFilters()
    .ClearAllFilters()
    .HideShowIssuerColumn();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...