使用@FindBy时,我们如何实现“等待”功能?

时间:2016-08-30 12:11:03

标签: java selenium selenium-webdriver

当我使用页面对象模型时,我使用@FindBy方法,但是如何实现以下语句?

wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Logout")))

4 个答案:

答案 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字符串用于指定实际元素idxpath等。
  • 大多数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定位器,我可以在我的显式等待中使用,我也有方法来识别页面上的元素只在一个地方,当发生任何变化时,可以像以前一样轻松维护我的自动化解决方案。

我很好奇其他人如何处理这个而不会失去内置的显式等待方法。