不同类型的显式等待条件

在显式等待中,你期望条件发生。例如,你要等到元素可单击。

以下是一些常见问题的演示。

请注意:在所有这些示例中,你可以使用任何 By 作为定位器,例如 classnamexpathlink texttag namecssSelector

等到元素可见

例如,如果你的网站需要一些时间来加载,你可以等到页面完成加载,并且你的元素对 WebDriver 可见。

C#

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("element-id")));

Java 的

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("element-id")));

等到元素不再可见

和以前一样,但是相反。

C#

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.Id("element-id")));

Java 的

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("element-id")));

等到指定元素中出现文本

C#

IWebElement element = driver.FindElement(By.Id("element-id"));

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.TextToBePresentInElement(element, "text"));

Java 的

WebElement element = driver.findElement(By.id("element-id"));

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.textToBePresentInElement(element, "text"));

如果你转到上面给定的链接,你会看到那里的所有等待条件。

这些等待条件的使用之间的差异在于它们的输入参数。

这意味着如果 WebElement 的输入参数是 WebElement,则需要传递 WebElement,如果将 By Locator 作为其输入参数,则需要传递元素定位器。

明智地选择你想要使用什么样的等待条件。