Selenium c# - 等待文本不可见但似乎不起作用

时间:2017-09-18 16:20:18

标签: c# selenium assert

我是Selenium和C#的新手并创建了一个自动化测试,我可以创建并立即删除它(所有这些都在同一个测试中)。

我测试的最后一步是验证我删除的项目的名称不再可见 - 这就是我似乎陷入困境的地方。

我在一个模态对话框中,该项目在后台可见,所以一旦我在模态对话框中确认删除,下一步就是验证项目名称不再可见,但代码确实看到了名称因此抛出异常是因为它是真的而不是我预期的假结果。

见下面我正在使用的代码:

public bool DeletedCategoryNoLongerVisible(string CategoryDisplayName) {
  try {
    WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(20));
    wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id='10_anchor']")));
    Driver.FindElement(By.XPath($ "//*[@class='jstree-anchor'][text()='{CategoryDisplayName}']"));
    return false;
  } catch (Exception) {
    return true;
  }
}

1 个答案:

答案 0 :(得分:0)

您可以使用InvisibilityOfElementWithText等待目标元素丢失或显示的文字为空:

new WebDriverWait(Driver, TimeSpan.FromSeconds(20))
  .Until(ExpectedConditions.InvisibilityOfElementWithText(By.XPath(...), CategoryDisplayName));

如果元素隐藏在其上面的另一个元素,则尝试单击它直到失败:

new WebDriverWait(Driver, TimeSpan.FromSeconds(20))
  .Until((driver) => {
    try {
        driver.FindElement(By.XPath(...)).Click();
        return false;
    } catch (WebDriverException) { 
        return true;
    }
  });