0

次の要素を探しています。

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

4

1 に答える 1