Явное ожидание.
Согласно официальной документации (http://www.seleniumhq.org/docs/0...), Thread.sleep () - наихудший случай явного ожидания.
При явном ожидании, не дожидаясь истечения максимального времени, оно продолжается, как только возникает условие, если это условие возникает до того, как истечет указанное максимальное время. Следовательно, ожидание максимального времени (поскольку условие не произошло в течение указанного максимального времени) является наихудшим случаем явного ожидания.
Я думаю, что Thread.sleep () считается наихудшим случаем явного ожидания, потому что для Thread.sleep () он должен ждать все время, указанное в качестве аргумента Thread.sleep (), прежде чем продолжить .
Вы можете подумать, почему Thread.sleep () не является неявным ожиданием. Я думаю, что это потому, что эффект Thread.sleep () находится только в том месте, где он написан, как явное ожидание. Однако эффект неявного ожидания распространяется на весь срок службы экземпляра драйвера.
**JAVA**
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
**C#**
using (IWebDriver driver = new FirefoxDriver())
{
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>(d => d.FindElement(By.Id("someDynamicElement")));
}
Это ожидает до 10 секунд, прежде чем выдать TimeoutException или если он найдет, что элемент вернет его через 0 - 10 секунд.
В моем примере кода, в моем тестовом примере я ждал максимум 10 секунд, раньше я ждал 10 секунд, прежде чем нашел следующий элемент с помощью Thread.Sleep. Теперь я использую WebDriverWait, поэтому, если элемент найден, он продолжается, это ускоряет мою повседневную деятельность, а также экономит время.
using (IWebDriver driver = new ChromeDriver(options))
{
TimeSpan t = TimeSpan.FromSeconds(10);
WebDriverWait wait = new WebDriverWait(driver,t);
try
{
driver.Navigate().GoToUrl("URL");
//IWebElement username = driver.FindElement(By.Name("loginfmt"));
IWebElement username = wait.Until(ExpectedConditions.ElementIsVisible(By.Name("loginfmt")));
username.SendKeys(dictionaryItem);
//Thread.Sleep(10000); Removed my Thread.Sleep and tested my wait.Until and vola it works awesome.
IWebElement next = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("idSIButton9")));
//IWebElement nextdriver.FindElement(By.Id("idSIButton9"));
next.Click();