【问题标题】:Explicit Wait PageFactory @Findby显式等待 PageFactory @Findby
【发布时间】:2015-04-21 14:23:32
【问题描述】:

我在 Java 中有这个带有 css 定位器的等待命令,然后点击它。

  new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button.md-primary.md-raised.md-button.md-default-theme"))).click();

现在我将该定位器转换为一个 pagefactory 对象,即lp.btnSignIn() 发出此显式等待然后单击的正确方法是什么?我还能使用预期条件吗?

这是我的 PageFactory 代码:

@FindBy(css="button.md-primary.md-raised.md-button.md-default-theme")
WebElement btnSignIn;

public WebElement btnSignIn() {
    return btnSignIn;
}

【问题讨论】:

    标签: java selenium-webdriver wait factory


    【解决方案1】:

    改成VisibilityOf解决:

    new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOf(lp.btnSignIn())).click();
    

    但要小心,因为这会检查元素是否可见,它可能不可见,但它仍然在 DOM 中。

    【讨论】:

      【解决方案2】:

      这仅取决于您的 lp.btnSignIn() 方法返回的内容。

      引用 selenium 文档here

      public static ExpectedCondition<WebElement> presenceOfElementLocated(By locator)
      

      检查元素是否存在于页面的 DOM 上的期望。这并不一定意味着该元素是可见的。

      参数:

      定位器 - 用于查找元素

      返回: 定位后的 WebElement

      因此,只有在返回 css 定位器而不是 WebElement 时,您才能使用 lp.btnSignIn()

      因此您的 btnSignIn() 方法会是这样的:

      public static Locater btnSignIn() {
          return By.cssSelector("button.md-primary.md-raised.md-button.md-default-theme");
      }
      

      现在您可以使用以下预期条件:

      new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(lp.btnSignIn())).click()`;
      

      【讨论】:

      • 它返回一个 css 定位器。插入我的 WebElement 的正确语法是什么?
      • 嗨,我看到问题是我的对象是 WebElement 而不是定位器。请参阅我编辑的代码。谢谢
      • 你不能使用presenceOfElementLocatedBy你将不得不使用一些预期的条件,但它不会做同样的事情
      猜你喜欢
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2013-12-03
      相关资源
      最近更新 更多