Chiarificazione della causa del mescolamento delle attese implicite ed esplicite del Selenium doc

Stavo leggendo la documentazione SeleniumHQ e ho trovato le seguenti dichiarazioni.

“ATTENZIONE: non mescolare le attese implicite ed esplicite, poiché ciò può causare tempi di attesa imprevedibili, ad esempio l’impostazione di un’attesa implicita di 10 secondi e un’attesa esplicita di 15 secondi, potrebbe causare un timeout dopo 20 secondi.”

Per qualche ragione, non riesco a capire che abbia senso. Il timeout totale di 20 è il principale punto di confusione per me. Qualcuno può spiegare se mi manca qualcosa?

MODIFICARE

La mia domanda non riguarda l’implementazione / le conseguenze del mescolare quelle attese. Riguarda interamente le dichiarazioni e il calcolo del timeout sul documento.

2a modifica

Sembra che il documento sia corretto in base ai test seguenti. Ho ancora bisogno della spiegazione però .

Solo attesa implicita

using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); _webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { //new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( //ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } catch ( NoSuchElementException exception) //catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Tempo in secondi: 00: 00: 10.0167290

Aspetta solo esplicita

 using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); //_webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } //catch ( NoSuchElementException exception) catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Tempo in secondi: 00: 00: 15.2463079

Entrambi, misto, esplicito e implicito

 using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); _webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } //catch ( NoSuchElementException exception) catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Tempo in secondi: 00: 00: 20.5771817