Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#等待_C#_Selenium Webdriver_Wait - Fatal编程技术网

C#等待

C#等待,c#,selenium-webdriver,wait,C#,Selenium Webdriver,Wait,我正在使用selenium/firefox/c#将数据输入网页中的多个字段,然后通过单击提交按钮将数据提交到网站。我尝试过使用隐式wait,以便程序等待结果页面加载最多45秒,然后从该页面获取结果。我现在把它编码成这样 driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(45)); driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click()

我正在使用selenium/firefox/c#将数据输入网页中的多个字段,然后通过单击提交按钮将数据提交到网站。我尝试过使用
隐式wait
,以便程序等待结果页面加载最多45秒,然后从该页面获取结果。我现在把它编码成这样

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(45));
driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click();

我在单击submit按钮之前进行了隐式的等待,但是即使页面加载只需要15秒,它也不会在最终加载时获取结果。我的
隐式等待
顺序正确吗?

您应该使用显式等待,使用如下代码:

 new WebDriverWait(driver, TimeSpan.FromSeconds(45)).Until(ExpectedConditions.ElementExists((By.Id("dnn_ctr1734_Professional_btnSubmit"))));
 driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click();

您应该使用显式等待,使用如下代码:

 new WebDriverWait(driver, TimeSpan.FromSeconds(45)).Until(ExpectedConditions.ElementExists((By.Id("dnn_ctr1734_Professional_btnSubmit"))));
 driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click();

隐式等待的正确位置通常在初始化驱动程序之后。它基本上充当操作完成的默认等待时间

有几种方法可以解决你的问题

  • 使用带有预期条件的显式等待,以等待忙碌的微调器消失

    var wait=new WebDriverWait(Driver.Instance,TimeSpan.FromSeconds(10)); 等待.Until(driver=>!driver.FindElement(By.Id(“busySpinnerID”))。显示)

  • 等待页面上显示特定元素

    var wait=new WebDriverWait(Driver.Instance,TimeSpan.FromSeconds(10)); wait.Until(driver=>driver.FindElement(By.Id(“knownElementId”))。显示)

  • 使用JavaScript等待页面加载完毕

    var wait=new WebDriverWait(驱动程序,TimeSpan.FromSeconds(30)); wait.Until(driver1=>((IJavaScriptExecutor)driver.ExecuteScript(“return document.readyState”).Equals(“complete”)


  • 隐式等待的正确位置通常在初始化驱动程序之后。它基本上充当操作完成的默认等待时间

    有几种方法可以解决你的问题

  • 使用带有预期条件的显式等待,以等待忙碌的微调器消失

    var wait=new WebDriverWait(Driver.Instance,TimeSpan.FromSeconds(10)); 等待.Until(driver=>!driver.FindElement(By.Id(“busySpinnerID”))。显示)

  • 等待页面上显示特定元素

    var wait=new WebDriverWait(Driver.Instance,TimeSpan.FromSeconds(10)); wait.Until(driver=>driver.FindElement(By.Id(“knownElementId”))。显示)

  • 使用JavaScript等待页面加载完毕

    var wait=new WebDriverWait(驱动程序,TimeSpan.FromSeconds(30)); wait.Until(driver1=>((IJavaScriptExecutor)driver.ExecuteScript(“return document.readyState”).Equals(“complete”)


  • 我同意Dmitry的观点,处理等待的最佳方法是使用显式等待函数。为了使您的生活更加轻松,您可以将其添加到扩展方法中,以便在单击之前始终等待元素存在。例如:

    Class Actions {
    
            public static IWebDriver ClickOn(IWebDriver driver, string button) 
            {
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
                wait.Until(ExpectedConditions.ElementExists(By.XPath(button)));
                driver.FindElement(By.XPath(button)).Click();
                return driver;
            }
    }
    
    那么你的代码就可以简单到

    Actions.ClickOn(d, SignInButton);
    

    而且您的代码在单击之前仍将等待元素存在。

    我同意Dmitry,处理等待的最佳方法是使用显式等待函数。为了使您的生活更加轻松,您可以将其添加到扩展方法中,以便在单击之前始终等待元素存在。例如:

    Class Actions {
    
            public static IWebDriver ClickOn(IWebDriver driver, string button) 
            {
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
                wait.Until(ExpectedConditions.ElementExists(By.XPath(button)));
                driver.FindElement(By.XPath(button)).Click();
                return driver;
            }
    }
    
    那么你的代码就可以简单到

    Actions.ClickOn(d, SignInButton);
    

    您的代码仍将等待元素存在,然后单击。

    不,45秒是很长的时间。当这种情况发生时,就意味着发生了其他事情。确保按钮可见。通过代码进行屏幕截图。在单击之前,还要将窗口最大化。有时问题只是窗口的默认大小太小,元素不可见。你在用什么浏览器?不,45秒是很长的时间。当这种情况发生时,就意味着发生了其他事情。确保按钮可见。通过代码进行屏幕截图。在单击之前,还要将窗口最大化。有时问题只是窗口的默认大小太小,元素不可见。你在用什么浏览器?我在用firefox。我应该再次重申,在这个项目中,提交按钮始终存在,并且可以单击。我想做的是在我单击submit按钮之后,我希望页面等待结果加载,然后查找页面加载后始终出现的其他元素。我是否应该在driver.FindElement(By.Id(“dnn_ctr1734_Professional_btnSubmit”))之后放置隐式等待。单击();这里有更多的代码,所以你可以看到我在寻找什么。单击“提交”按钮后,加载结果页面可能需要5-45秒(单击“提交”后会出现一个旋转的徽标,直到加载为止)。driver.FindElement(By.Id(“dnn_ctr1734_Professional_btnSubmit”)。单击();if(driver.FindElements(By.XPath(“.//tr[td[contains(text(),'Claim Status')]]]/td[2]”).Count>0{activeSheet.Range[“P”+n]。Value=driver.FindElement(By.XPath(“.//tr[td[contains(text(),'Claim Status')]]]]]]]/td[2]”)。text;activeSheet.Range[“Q”+n]。Value=driver.FindElement(By.XPath(“.//tr[contains(text(),'claims(text()),'Claim ICN')]]/td[2]”。Text;activeSheet.Range[“R”+n]。Value=driver.findelelement(By.XPath(“.//tr[td[contains(Text(),'Paid Amount')]]]/td[2]”)。Text;}我正在使用firefox。我应该再次重申,在这个项目中,提交按钮始终存在,并且可以单击。我想做的是在我单击submit按钮之后,我希望页面等待结果加载,然后查找页面加载后始终出现的其他元素。我是否应该在driver.FindElement(By.Id(“dnn_ctr1734_Professional_btnSubmit”))之后放置隐式等待。单击();这里有更多的代码,所以你可以看到我在寻找什么。单击“提交”按钮后,加载结果页面可能需要5-45秒(单击“提交”后会出现一个旋转的徽标,直到加载为止)。driver.FindElement