Stavo leggendo la documentazione SeleniumHQ e ho trovato le seguenti dichiarazioni.Chiarimento della causa del mix Attese implicite ed esplicite di Selenium doc
"ATTENZIONE:.. Non mescolare attese implicite ed esplicite Ciò potrebbe causare tempi di attesa imprevedibili Per impostare un implicito un'attesa di 10s e un'attesa esplicita di 15 secondi ad esempio, potrebbe causare un timeout si verifichi dopo 20 secondi. "
Per qualche motivo, non riesco a farlo avere senso. Il timeout totale di 20 è il principale punto di confusione per me. Qualcuno può spiegare se mi manca qualcosa?
EDIT
La mia domanda non è circa l'attuazione/conseguenze di miscelazione quelle attese. Riguarda interamente le dichiarazioni e il calcolo del timeout sul documento.
2 ° Modifica
Sembra che il doc è corretta in base alle prove di seguito. Ho ancora bisogno della spiegazione se.
solo aspettare implicito
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
solo aspettare 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 seconda: 00:00 : 15.2463079
misto, esplicite ed implicite sia
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
Molte risposte su SO !!! http://stackoverflow.com/a/15174978/3124333 http://stackoverflow.com/a/28067495/3124333 – SiKing
@SiKing Grazie per il tuo tempo e ** DOWNVOTE **. La mia confusione non è sull'implementazione * Sono confuso riguardo al calcolo dei timeout ** 20s ** sul doc. Volevo sapere come sono usciti con ** 20s ** e probabilmente il link che hai fornito non parla della stessa cosa di cui sto parlando qui – Saifur
@SiKing: sono d'accordo che ci sono molte risposte ma nessuna di esse giustifica come il tempo di attesa è calcolato – LittlePanda