selenium-webdriver - 如何使用 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")}
解决方案
Geb 的选择器结果(从调用返回的东西$()
)被称为Navigator
s 并且是 Selenium s 集合的包装器WebElement
。因为导航器不仅可以从 css 选择器创建(您可以在它们上链接多个find()
调用,您可以将它们基于 xpath 表达式,并且您可以通过匹配它们的文本来过滤它们的内容,只是给出一些示例)您无法映射从 aNavigator
到 css 选择器的一对一。如果您的意图是在与之交互之前始终等待flipperCardOne
可见,那么惯用的方法是使用waitCondition
content 选项:
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)
推荐阅读
- javascript - 自动生成新的分区并标记它
- hibernate - Spring Data - 如何将 YearMonth 类型的 @Param 转换为 LocalDate 的开始和结束?
- sql - 转换表格数据并重新格式化
- django - 我无法让这个外键表值显示在 django 模板中
- aws-sdk - 无法通过 sdk 创建节点组
- r - enforcePackage(name, curVersion) 中的错误:在库中找不到闪亮的包
- r - 如何创建车辆沿路线从 A 移动到 B 的动画?
- typescript - 是否可以让 TS Vite 使用 ESM 并让 TS Gulp 在同一个项目中使用 Common JS?
- javascript - 在没有数据库的情况下,在 JavaScript 中存储和处理数据的最佳解决方案是什么?
- amazon-web-services - 通过 API 创建 AWS 安全组的问题