C#等待
我正在使用selenium/firefox/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()
隐式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();
隐式等待的正确位置通常在初始化驱动程序之后。它基本上充当操作完成的默认等待时间 有几种方法可以解决你的问题
隐式等待的正确位置通常在初始化驱动程序之后。它基本上充当操作完成的默认等待时间 有几种方法可以解决你的问题
我同意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