我正在写我的第一次硒测试。太棒了,我已经登录我的应用程序,这让我感到头晕目眩。这是使用ChromeDriver的自动UI功能:
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工作得很好。我的单页角度应用程序(登录时)加载其他内容并显示它。 TenantManagement.CreateTenant(driver,false)是出错的地方。该部分的第一行失败了:
public static bool CreateTenant(IWebDriver driver, bool testLogin)
{
driver.FindElement(By.Id("TenantsTab")).Click();
...
}
正如您所看到的,我在此调用之前有一个线程休眠,以确保在尝试查找元素之前已加载所有内容。在Chrome开发工具(元素检查器)中查看html时,我看到:
<li ng-class="{active: active, disabled: disabled}" id="TenantsTab" ng-repeat="Tab in SelectedArea.Pages | filter:lessThanTwo" ng-click="trackTab(Tab)" active="Tab.active" heading="Tenants" class="ng-isolate-scope">
<a ng-click="select()" tab-heading-transclude="" class="ng-binding">Tenants</a>
</li>
当线程唤醒并试图找到它时,该元素肯定存在,但它没有被找到。关于我在这里做错了什么或者在使用硒时如何解决这个问题的任何线索?
答案 0 :(得分:0)
这样做的正确方法似乎是使用selenium wait functionality(我刚刚发现)。加上这个:
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
到我的CreateTenant()方法的开头,selenium最多等待10秒钟,以便元素可用,并添加有效的元素。不确定为什么线程睡眠没有。