C# selenium webdriver C中的隐式等待命令不起作用#

C# selenium webdriver C中的隐式等待命令不起作用#,c#,selenium,webdriver,wait,implicit,C#,Selenium,Webdriver,Wait,Implicit,伙计们,我已经开始研究selenium web驱动程序。你可以假设我是初学者。目前,我在代码(C#)中实现隐式wait命令时遇到困难。它不能正常工作,并且由于找不到元素而导致异常,但是当我添加“Thread.Sleep(3000)”时,代码执行得非常完美。我一直在互联网上寻找解决方案,但无法解决问题。下面我提到了示例代码 class Entrypoint { static void Main() { IWebDriver driver = new ChromeDriver(); *

伙计们,我已经开始研究selenium web驱动程序。你可以假设我是初学者。目前,我在代码(C#)中实现隐式wait命令时遇到困难。它不能正常工作,并且由于找不到元素而导致异常,但是当我添加“Thread.Sleep(3000)”时,代码执行得非常完美。我一直在互联网上寻找解决方案,但无法解决问题。下面我提到了示例代码

class Entrypoint
{

static void Main()

{
 IWebDriver driver = new ChromeDriver();
    **driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);**
    driver.Navigate().GoToUrl("https://r1.netrevelation.com:8443/mcba-cms/pages/flight-transfer.cab");
    driver.Manage().Window.Maximize();


    driver.FindElement(By.Id("loginlink")).Click();
    driver.FindElement(By.Id("headerSubView:inputUserName:input")).SendKeys("st001");
    driver.FindElement(By.Id("headerSubView:inputPassword:input")).SendKeys("hello321" + Keys.Enter);

    driver.FindElement(By.Id("dateOfFlight:input")).Click();**//This Step does not get Executed , it throws exception element not found.**
    driver.FindElement(By.Id("ui-datepicker-div")).Click(); 
    driver.FindElement(By.XPath(".//*[@id='ui-datepicker-div']/div/a[2]/span")).Click(); 
    driver.FindElement(By.LinkText("28")).Click(); 
    IWebElement Flightno = driver.FindElement(By.Id("selectedFlight:input"));
    Flightno.SendKeys("BA901" + Keys.Enter);
    IWebElement Flighttick = driver.FindElement(By.Id("flightTickImg"));


    driver.Quit();
请注意,目前我不想使用显式等待,因为隐式等待将满足我的需要(如果它开始工作的话)。上面的代码以超音速运行,不知何故,它成功登录到系统,但之后每次登录请求发出时都失败。系统暂停2-3秒。请提供您对此的评论。

根据,an是在尝试
查找元素()
查找所有元素()
,如果这些元素不立即可用。但中元素的可用性不能保证您在代码块中尝试过的元素是可用的。因此,您将面临
异常


解决方案: 因此,您的问题的解决方案是归纳,即with子句as,它不仅会确认HTML DOM中某个元素的可用性,而且还会确保该元素是可单击的,即元素的显示和启用如下所示:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("loginlink")));