Testing 为什么赢了';你没看到我的元素吗?

Testing 为什么赢了';你没看到我的元素吗?,testing,selenium,selenium-webdriver,Testing,Selenium,Selenium Webdriver,我正在写我的第一个硒测试。这是惊人的,我已经把它登录到我的应用程序,这让我感到头晕。下面是我使用ChromeDriver实现的自动化用户界面: var options = new ChromeOptions(); options.AddArgument("--start-maximized"); IWebDriver driver = new ChromeDriver(options); Authentication.LogInAsAdmin(driver); System.Threading.

我正在写我的第一个硒测试。这是惊人的,我已经把它登录到我的应用程序,这让我感到头晕。下面是我使用ChromeDriver实现的自动化用户界面:

var options = new ChromeOptions();
options.AddArgument("--start-maximized");
IWebDriver driver = new ChromeDriver(options);
Authentication.LogInAsAdmin(driver);
System.Threading.Thread.Sleep(1000);
TenantManagement.CreateTenant(driver, false);
Authentication.LogInAsAdmin工作正常。我的单页angular应用程序(登录时)加载并显示其他内容。CreateTenant(驱动程序,false)是出错的地方。该部分的第一行出现故障:

public static bool CreateTenant(IWebDriver driver, bool testLogin)
{
    driver.FindElement(By.Id("TenantsTab")).Click();
    ...
}
如您所见,我在调用之前有一个线程睡眠,只是为了确保在尝试查找元素之前加载了所有内容。在Chrome开发工具(element inspector)中查看html时,我看到:

  • 租户

  • 当线程唤醒并试图找到它时,该元素肯定存在,但找不到它。关于我在这里做错了什么,或者在使用selenium时如何进行故障排除,有什么线索吗?

    正确的方法似乎是使用(我刚刚发现)。加入以下条文:

    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
    

    在我的CreateTenant()方法的开头,selenium最多会等待10秒,等待一个元素变为可用,然后添加该元素。不知道为什么线程睡眠不起作用。

    最好避免。在selenium中睡眠,让隐式等待为您完成。使用
    线程。睡眠
    在代码中,它将等待1秒,然后再尝试查找元素。这并不保证元素的可用性和/或可见性。如果你把睡眠时间缩短到10秒,它可能会起作用。但是现在,您强制代码等待10秒,即使元素在5秒内可用。这是不使用线程睡眠的主要原因,因为它将您绑定到一个硬限制。
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));