次の要素を探しています。
<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 が要素をロードした後に更新されていないためです。