当我使用页面对象模型时,我使用@FindBy
方法,但是如何实现以下语句?
wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Logout")))
答案 0 :(得分:0)
您可以使用ExpectedConditions.elementToBeClickable
作为: -
@FindBy(linkText = "Logout")
WebElement logOut;
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(logOut));
答案 1 :(得分:0)
您可以设置等待每个页面
PageFactory.initElements(new AjaxElementLocatorFactory(driver, TIMEOUT), this);
答案 2 :(得分:0)
DELETE FROM transactions WHERE ID < (
SELECT ID FROM (
SELECT ID FROM transactions t WHERE
DATE(date) <= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND
user = transactions.user
ORDER BY ID DESC
LIMIT 1 OFFSET CASE WHEN EXISTS (
SELECT ID FROM transactions x WHERE
DATE(date) > DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND
user = transactions.user
) THEN 0 ELSE 1 END
)
)
比在需要时调用方法:
private void waitForVisibility(WebElement element) throws Error{
new WebDriverWait(driver, 30)
.until(ExpectedConditions.visibilityOf(element));
}
答案 3 :(得分:0)
似乎到目前为止大多数解决方案都不完整,因为您无法使用static
类提供的整个ExpectedConditions
方法。
开始说明和一些其他信息: 示例是针对C#的,因为我不太清楚Java语法,但我希望它是一样的。
[FindsBy]
属性作为参数获取2个值。第一个是Enum
,它指定如何查找元素(id,xpath,css选择器等),第二个,更重要的是本例,是接收常量字符串的Using
。此const
字符串用于指定实际元素id
,xpath
等。ExpectedConditions
静态方法作为参数接收By
元素考虑到上述陈述,我接下来确定了页面上需要使用显式等待并构建我的代码的元素:
const string loginButtonXpath = "xpath_here";
[FindsBy(How = How.Xpath, Using=loginButtonXpath)]
private IWebElement LoginButton {get;set;}
private By LoginButtonBy
{
return By.Xpath(loginButtonXpath);
}
让它以这种方式设置,有一个我需要点击的IWebElement
按钮,我有By
定位器,我可以在我的显式等待中使用,我也有方法来识别页面上的元素只在一个地方,当发生任何变化时,可以像以前一样轻松维护我的自动化解决方案。
我很好奇其他人如何处理这个而不会失去内置的显式等待方法。