我知道这个问题有很多问题"无法找到元素"但这些答案都不适合我。
我的测试示例如下:
driver.FindElementById("OldPassword").Clear();
driver.FindElementById("OldPassword").SendKeys("Admin666*");
当我在我的计算机上运行测试时,它运行良好但在TeamCity代理失败后出现此错误:
测试方法CLSTesting.AccountControllerTests.TestManagePasswordChrome 抛出异常:OpenQA.Selenium.NoSuchElementException:没有这样的 element:无法定位元素: {"方法":" ID""选择器":" OldPassword更改"}
添加隐式等待或等到元素存在不起作用,并且没有iframe可以打开。我试图更改find元素方法,但我再次遇到相同的错误。似乎这个错误是随机的,但大多数测试都失败了。这是html示例:
<div class="form-group">
<label class="col-md-2 control-label" for="OldPassword">Current password:</label>
<div class="col-md-10">
<input class="form-control" id="OldPassword" name="OldPassword" type="password" />
</div>
</div>
你知道问题出在哪里吗?谢谢!
UPDATE - 我用于等待元素的扩展方法:
public static bool WaitUntilElementIsPresent(this IWebDriver driver, By by, int timeout = 20)
{
for (var i = 0; i < timeout; i++)
{
if (driver.ElementIsPresent(by)) return true;
Thread.Sleep(500);
}
return false;
}
public static bool ElementIsPresent(this IWebDriver driver, By by)
{
try
{
return driver.FindElement(by).Displayed;
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
return false;
}
}