C# Selenium WebDriver引发NoTouchElement异常,然后在我点击continue时查找元素

C# Selenium WebDriver引发NoTouchElement异常,然后在我点击continue时查找元素,c#,selenium-webdriver,C#,Selenium Webdriver,在下面的代码中 using System; using System.Security.Policy; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support; using OpenQA.Selenium.Support.PageObjects; namespace StackOverflowTest { class Program { static v

在下面的代码中

using System;
using System.Security.Policy;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Support.PageObjects;

namespace StackOverflowTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("http://www.stackoverflow.com");
            driver.FindElement(By.LinkText("log in")).Click();
            driver.FindElement(By.ClassName("google-login")).Click();
            Int16 myInt = 2; //breakpoint goes here.
            driver.Close();
        }
    }
}

Selenium正在引发“NoTouchElement”异常。然后当我点击continue时,它点击了它应该找不到的元素。有人能向我解释为什么会发生这种情况/我做错了什么吗?

加载元素可能需要一些时间。可以使用显式wait with来等待元素

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.LinkText("log in"))).Click();
或设置隐式等待

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

加载元素可能需要一些时间。可以使用显式wait with来等待元素

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.LinkText("log in"))).Click();
或设置隐式等待

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

在你发布之前我就知道了。但我用的是Thread.Sleep(25000)。WebDriverWait是告诉selenium等待的首选方法吗?或者线程。睡眠工作?我知道这不会被视为“种族条件”。当你的应用程序运行速度比你的响应参与者快时,这个定义是什么?@CryptoJones
Thread.Sleep(25000)
将停止脚本25秒,不需要什么
WebDriverWait
同时将等待最多25秒,以使元素满足条件。如果条件在2秒后满足,脚本将在2秒后继续。它实际上是竞赛条件。您使用的代码在html“生成”元素存在之前查找该元素。这就是
WebDriverWait
创建的目的。在你发布它之前,我就发现了这一点。但我用的是Thread.Sleep(25000)。WebDriverWait是告诉selenium等待的首选方法吗?或者线程。睡眠工作?我知道这不会被视为“种族条件”。当你的应用程序运行速度比你的响应参与者快时,这个定义是什么?@CryptoJones
Thread.Sleep(25000)
将停止脚本25秒,不需要什么
WebDriverWait
同时将等待最多25秒,以使元素满足条件。如果条件在2秒后满足,脚本将在2秒后继续。它实际上是竞赛条件。您使用的代码在html“生成”元素存在之前查找该元素。这就是创建WebDriverWait的目的。