Selenium webdriver 如何使用WebDriver调用预定义的Geb页面元素?

Selenium webdriver 如何使用WebDriver调用预定义的Geb页面元素?,selenium-webdriver,groovy,geb,Selenium Webdriver,Groovy,Geb,我创建了一个可重用的WebDriver方法,但我一辈子都不知道如何使用WebDriver调用预定义的Geb页面CSS选择器 此方法有效,但我似乎无法使用WebElementelement: static void WaitVisibilityOfElement(WebDriver driver, By cssSelector, int timeoutInSeconds) { WebDriverWait Wait = new WebDriverWait(driver, timeoutInS

我创建了一个可重用的
WebDriver
方法,但我一辈子都不知道如何使用WebDriver调用预定义的Geb页面CSS选择器

此方法有效,但我似乎无法使用
WebElement
element:

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")}
Geb的选择器结果(调用
$()
返回的内容)称为
Navigator
s,是Selenium的
WebElement
s集合的包装器。因为导航器可以从不止一个css选择器创建(您可以对它们链接多个
find()
调用,您可以基于xpath表达式创建它们,并且您可以通过匹配它们的文本来过滤它们的内容,只是为了给出一些示例),所以您无法将
Navigator
中的一个映射到css选择器。如果您的目的是在与flipperCardOne交互之前始终等待它可见,那么惯用的方法是使用:

然后你可以做flipperCardOne。点击(),它就可以工作了

如果你坚持使用与你在问题中列出的方法相似的方法(我认为这不是正确的做法),那么你需要类似的方法:

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)

你希望如何使用你的方法?一个简单的例子会很方便。@erdi是
flipperCardOne(wait:true,waitCondition:{it.displated})
waitFor{flipperCardOne.displated}相同
?这不完全相同,因为调用用
wait
waitCondition
定义的
flipperCardOne
将返回一个导航器并调用
waitFor{flipperCardOne.displated}
将返回一个布尔值,但它们的相同之处在于,在
flipperCardOne
定义中使用的元素可见之前,它们不会返回。
WaitVisibilityOfElement(browser.driver, flipperCardOne.singleElement, 5)