我创建了一个可重用的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")}
Geb的选择器结果(从对$()
的调用返回的结果)称为Navigator
,并且是Selenium WebElement
的集合的包装。因为可以从多个CSS选择器中创建导航器(您可以在它们上面链接多个find()
调用,所以可以基于xpath表达式作为它们的基础,并且可以通过匹配它们的文本来过滤它们的内容,仅举几个例子)您无法从Navigator
到CSS选择器一对一地映射。如果您打算在与flipperCardOne
进行交互之前始终等待其可见,那么惯用的方式是使用waitCondition
content option:
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()
}