Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium c#-等待文本不可见但不显示';好像不行_C#_Selenium_Assert - Fatal编程技术网

Selenium c#-等待文本不可见但不显示';好像不行

Selenium c#-等待文本不可见但不显示';好像不行,c#,selenium,assert,C#,Selenium,Assert,我不熟悉Selenium和C#并创建了一个自动测试,通过该测试我可以创建一些东西并立即删除它(都在同一个测试中) 测试的最后一步是验证我删除的项目的名称不再可见-这就是我似乎被卡住的地方 我在模式对话框中,项目在后台可见,因此,一旦我在模式对话框中确认删除,下一步是验证项目名称不再可见,但代码确实看到了名称,因此引发异常,因为它是true,而不是我预期的false结果 请参见下面我正在使用的代码: public bool DeletedCategoryNoLongerVisible(string

我不熟悉Selenium和C#并创建了一个自动测试,通过该测试我可以创建一些东西并立即删除它(都在同一个测试中)

测试的最后一步是验证我删除的项目的名称不再可见-这就是我似乎被卡住的地方

我在模式对话框中,项目在后台可见,因此,一旦我在模式对话框中确认删除,下一步是验证项目名称不再可见,但代码确实看到了名称,因此引发异常,因为它是true,而不是我预期的false结果

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

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;
  }
}

您可以使用
InvisibilityFelementWithText
,等待目标元素丢失或其显示的文本为空:

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;
    }
  });

您可以使用
InvisibilityFelementWithText
,等待目标元素丢失或其显示的文本为空:

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;
    }
  });

是否正在尝试验证元素或文本?元素是真的被删除了还是仅仅是文本?@IamBatman,文本已经被删除了,所以我想验证一下。我指定的ElementToBeClickable是一个按钮,它位于模式后面,但似乎没有帮助。那么它是按钮上的文本还是输入字段中的文本?无论哪种方式,为什么不从元素中获取文本并执行条件转换呢?如果不存在,则执行此操作,否则执行该操作。是否尝试验证元素或文本?元素是真的被删除了还是仅仅是文本?@IamBatman,文本已经被删除了,所以我想验证一下。我指定的ElementToBeClickable是一个按钮,它位于模式后面,但似乎没有帮助。那么它是按钮上的文本还是输入字段中的文本?无论哪种方式,为什么不从元素中获取文本并执行条件转换呢?如果不存在,就这样做,否则就那样做。