首页 > 解决方案 > 如何使用 WebDriver 调用预定义的 Geb Page 元素?

问题描述

我创建了一个可重用的WebDriver方法,但我一生都无法弄清楚如何使用 WebDriver 调用预定义的 Geb 页面 CSS 选择器。

此方法有效,但我似乎无法使用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")}

标签: selenium-webdrivergroovygeb

解决方案


Geb 的选择器结果(从调用返回的东西$())被称为Navigators 并且是 Selenium s 集合的包装器WebElement。因为导航器不仅可以从 css 选择器创建(您可以在它们上链接多个find()调用,您可以将它们基于 xpath 表达式,并且您可以通过匹配它们的文本来过滤它们的内容,只是给出一些示例)您无法映射从 aNavigator到 css 选择器的一对一。如果您的意图是在与之交互之前始终等待flipperCardOne可见,那么惯用的方法是使用waitConditioncontent 选项

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)

推荐阅读