我正在寻找以下元素:
<input id="login_input" value="" class="input_long " type="text" name="login" tabindex="1">
此元素在初始页面完全加载后由 javascript 加载。现在这是我获取此元素的代码:
IWebDriver _drv = new ChromeDriver();
_drv.Navigate().GoToUrl("http://mysite.com");
System.Threading.Thread.Sleep(2000);
do
{
try
{
_drv.FindElement(By.Id("login_input")).SendKeys("555567756756");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} while (true);
它给我的错误是说A first chance exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll
,当这个元素在网站上清晰可见时。
我可以做些什么来获得这个元素?
更新:稍微更改了我的代码:
IWebDriver _drv = new ChromeDriver();
_drv.Url = "http://mysite.com";
//_drv.Navigate().GoToUrl("http://mysite.com");
do
{
try
{
WaitUntilPresent(By.Id("login_input")).SendKeys("555567756756");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} while (true);
IWebElement WaitUntilPresent(By element)
{
return new WebDriverWait(_drv, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists(element));
}
以上给了我超时异常,这是因为_drv.PageSource
页面上的javascript加载元素后没有更新。