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)