Как я могу вызвать предопределенный элемент Geb Page с помощью WebDriver? - PullRequest
0 голосов
/ 27 октября 2019

Я создал метод WebDriver для повторного использования, но пока не могу понять, как я могу вызвать предопределенный селектор CSS страницы Geb с помощью WebDriver.

Этот метод работает, но я не могу вызвать его с помощью элемента WebElement:

static void WaitVisibilityOfElement(WebDriver driver, By cssSelector, int timeoutInSeconds) {
    WebDriverWait Wait = new WebDriverWait(driver, timeoutInSeconds)
    Wait.until(ExpectedConditions.visibilityOfElementLocated(cssSelector)).click()
}

Это элемент, который я пытаюсь вызвать, и я хочу просто бытьвозможность использовать имя элемента flipperCardOne, но если я это сделаю, он не будет работать.

flipperCardOne(wait:true) {$ (".flex-item:nth-child(5) .front > .w-100")}

1 Ответ

1 голос
/ 29 октября 2019

Результаты селектора Geb (вещи, возвращаемые при вызовах $()) называются Navigator s и являются оболочкой для коллекций WebElement s Selenium. Поскольку навигаторы могут создаваться не только из селекторов CSS (вы можете связать с ними несколько вызовов find(), вы можете основывать их на выражениях xpath и фильтровать их содержимое, сопоставляя их текст, только для примера)Вы не можете отобразить один на один из Navigator в селектор CSS. Если вы намерены всегда ждать, пока flipperCardOne станет видимым, прежде чем взаимодействовать с ним, тогда идиоматическим способом сделать это будет использование waitCondition опции содержимого :

flipperCardOne(wait:true, waitCondition: { it.displayed }) {$ (".flex-item:nth-child(5) .front > .w-100")}

Тогда вы могли бы просто сделать flipperCardOne.click(), и это сработало бы.

И если вы настаиваете на использовании метода, аналогичного тому, который вы перечислили в вопросе (и я бы сказал, что это не правильно)тогда вам нужно что-то вроде:

static void WaitVisibilityOfElement(WebDriver driver, WebElement webElement, int timeoutInSeconds) {
    WebDriverWait Wait = new WebDriverWait(driver, timeoutInSeconds)
    Wait.until(ExpectedConditions.visibilityOf(webElement)).click()
}

, а затем назвать это как:

WaitVisibilityOfElement(browser.driver, flipperCardOne.singleElement, 5)
...