2015-04-06 5 views
12

के लागू और स्पष्ट प्रतीक्षा मिश्रण के कारण का स्पष्टीकरण मैं SeleniumHQ दस्तावेज़ीकरण पढ़ रहा था और निम्नलिखित बयानों में आया था।सेलेनियम दस्तावेज़

"चेतावनी: अंतर्निहित और स्पष्ट प्रतीक्षा न करें। ऐसा करने से अप्रत्याशित प्रतीक्षा समय हो सकता है। उदाहरण के लिए 10s की निहित प्रतीक्षा और 15 सेकंड की स्पष्ट प्रतीक्षा, 20 सेकंड के बाद टाइमआउट होने का कारण बन सकता है। "

किसी कारण से, मुझे यह समझ में नहीं आ रहा है। कुल टाइमआउट 20s मेरे लिए मुख्य भ्रम बिंदु है। क्या कोई समझा सकता है कि मुझे कुछ याद आ रहा है?

संपादित

मेरा प्रश्न उन प्रतीक्षा करता है मिश्रण के कार्यान्वयन/परिणाम के बारे में नहीं है। यह पूरी तरह से दस्तावेज़ पर समय समाप्ति के बयान और गणना के बारे में है।

2 संपादित

ऐसा लगता है कि दस्तावेज़ नीचे परीक्षण के अनुसार सही है। मुझे अभी भी स्पष्टीकरण की आवश्यकता है हालांकि

बस अंतर्निहित इंतजार

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(); 

     } 
    } 
} 

दूसरे में समय: 00: 00: 10,0167290

बस स्पष्ट इंतजार

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(); 

     } 
    } 
} 

दूसरे में समय: 00:00 : 15.2463079

दूसरे में

, मिश्रित स्पष्ट और निहित दोनों

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(); 

     } 
    } 
} 

समय: 00: 00: 20,5771817

+0

एसओ पर कई जवाब !!! http://stackoverflow.com/a/15174978/3124333 http://stackoverflow.com/a/28067495/3124333 – SiKing

+0

@SiKing आपके समय के लिए धन्यवाद और ** डाउनवॉइट **। मेरा भ्रम * कार्यान्वयन पर नहीं है * मैं दस्तावेज़ पर ** 20s ** टाइमआउट की गणना के बारे में उलझन में हूं। मैं जानना चाहता था कि वे ** 20 के साथ कैसे आए ** और शायद आपके द्वारा प्रदान किया गया लिंक उसी बात के बारे में बात नहीं करता है जिसके बारे में मैं यहां बात कर रहा हूं – Saifur

+1

@SiKing: मैं मानता हूं कि कई जवाब हैं लेकिन उनमें से कोई भी औचित्य साबित नहीं करता कि कैसे प्रतीक्षा समय की गणना – LittlePanda

उत्तर

16

मेरा प्रश्न उन प्रतीक्षा करता है के कार्यान्वयन के बारे में नहीं है। यह पूरी तरह से दस्तावेज़ पर समय समाप्ति के बयान और गणना के बारे में है।

लेकिन आपको यह जानना होगा कि उन्हें क्या हो रहा है, यह समझने के लिए उन्हें कैसे कार्यान्वित किया जाता है। यहां दो प्रकार के इंतजारों के मिश्रण के साथ क्या होता है। मैं उन चरणों पर जा रहा हूं जो चर्चा के लिए महत्वपूर्ण नहीं हैं।

  1. आपकी स्क्रिप्ट एक निहित प्रतीक्षा सेट करती है।

  2. आपकी स्क्रिप्ट एक स्पष्ट प्रतीक्षा शुरू करती है कि तत्व मौजूद है या नहीं। स्पष्ट प्रतीक्षा मतदान द्वारा काम करता है। तो यह तत्व के अस्तित्व की जांच करने के लिए ब्राउज़र को एक आदेश भेजता है।

  3. निहित प्रतीक्षा पहले से सेट होने के कारण, ब्राउज़र में भेजे गए आदेश में विफलता वापस करने में 10 सेकंड लगते हैं।

  4. आपकी स्पष्ट प्रतीक्षा जांचती है कि क्या यह इसकी समय सीमा तक पहुंच गया है जो 15s है। यह वर्तमान में प्रतीक्षा में 10s (+ स्क्रिप्ट, नेटवर्क विलंबता, आदि निष्पादित करने के लिए लिया गया एक छोटा सा समय) है, जो 15 से कम है। इसलिए यह इंतजार नहीं किया गया है और उपरोक्त चरण 2 में समान आदेश जारी करता है।

  5. निहित प्रतीक्षा के कारण, ब्राउज़र में भेजे गए आदेश में विफलता वापस करने में 10 सेकंड लगते हैं।

  6. जब अपनी ही समय समाप्ति के लिए स्पष्ट इंतजार चेकों फिर, 15s से ज्यादा बीत चुके हैं, यह बहुत बार बाहर।

तो स्पष्ट इंतजार चुनाव दो बार, और हर बार 10 सेकंड जो 20 सेकंड के कुल (प्लस बहीखाता के लिए खाते में करने के लिए समय की एक छोटी राशि) का अर्थ लेता है।

एक स्पष्ट प्रतीक्षा सेट करने के लिए एक निश्चित प्रतीक्षा का पता लगाने और क्षतिपूर्ति करने के लिए कुछ भी नहीं करती है। और यह ब्राउज़र पर भेजे गए आदेशों के समानांतर में चलना जारी नहीं रखता है। जबकि ब्राउज़र कमांड निष्पादित करता है, स्पष्ट प्रतीक्षा कोई भी बहीखाता नहीं कर रही है या समय-समय पर सक्षम नहीं है। इसे जांचने से पहले ब्राउज़र कमांड को पूरा करने के लिए इंतजार करना होगा कि क्या इसे समय निकालना चाहिए या नहीं।

+2

ग्रेट स्पष्टीकरण। मैं भी अजीब अजीब इंतजार कर रहा हूं, आपकी पोस्ट ने मुझे तंत्र को समझने में मदद की (हालांकि, शायद मुझे एक और मुद्दा मिला, मेरे "लक्षण" थोड़ा अलग हैं)। – Stas