2012-10-19 25 views
7

मैं सेलेनियम 2 परीक्षण (सी # में लिखा गया) का उपयोग कर रहा हूं जो "चयन" नियंत्रण से मूल्य चुनते हैं। चयन सर्वर पर पोस्ट-बैक का कारण बनता है, जो पृष्ठ की स्थिति को अद्यतन करता है। इसलिए पेज बदलने के लिए प्रतीक्षा करने के लिए मूल्य चुनने के बाद मैं मैन्युअल प्रतीक्षा (thread.sleep) कर रहा हूं। और यह थ्रेड के साथ ठीक काम करता है। सो जाओ। हालांकि, Thread.Sleep एक बुरा विचार अच्छे कारणों इसलिए जब मैं अपने सभी Thread.Sleep कोड की लाइन बाहर ले की संख्या के साथ उपयोग करने के लिए है तो सभी अपने परीक्षण मामलों अलग गिर और मैं WebDriverWait की कोशिश की है, उलझाव से और स्पष्ट कोई भी काम करता है और बहुत निराशाWebDriverWait या ImplicitlyWait या ExplictlyWait कुछ भी काम नहीं करता

नीचे नमूना कोड है कि मैं कोशिश की है ....

है // WebDriverWait

public IWebElement WaitForElement(By by) 
{ 
      // Tell webdriver to wait 
      WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
      wait.PollingInterval = TimeSpan.FromSeconds(2); 
      wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(NoSuchFrameException)); 
      wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException), typeof(StaleElementReferenceException)); 

      IWebElement myWait = wait.Until(x => x.FindElement(by)); 
      return myWait; 
} 

यह भी कोशिश की:

WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(100)); 

// उलझाव:

driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30)); 

// स्पष्ट प्रतीक्षा:

IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
    { 
     return d.FindElement(By.Id("someDynamicElement")); 
    }); 

उत्तर

0

कोशिश का उपयोग करने के

new WebDriverWait(driver, 30).until(ExpectedConditions.presenseOfElementLocated(byLocator)); 
+0

हाँ मैं करने की कोशिश की थी, लेकिन काम नहीं किया। –

1

यहाँ क्या मेरे लिए काम करता है ->

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30)); 

element = wait.Until<IWebElement>((driver) => 
    { 
    return driver.FindElement(By.Name("name_of_element"))); 
    }); 

आप आईडी द्वारा भी कर सकते हैं - >

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30)); 

element = wait.Until<IWebElement>((driver) => 
    { 
    return driver.FindElement(By.Id("id_of_element"))); 
    }); 

अपने कोड को अधिक देखे बिना, यह निर्धारित करना मुश्किल होगा कि यह क्यों काम नहीं कर रहा है।

+0

मुझे बताएं कि आप कौन सा कोड चाहते हैं, इसलिए मैं इसे पेस्ट कर सकता हूं, और मुझे कोशिश करने दो –

0

मैं stackoverflow के साथ एक समाधान खोजने के :) और इस काम करता है:

click on partialLinkText("Exit") 
remote.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS) 
remote.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS) 
// Thread.sleep(7000) // for js-work 
(new WebDriverWait(remote, 245)).until(presenceOfElementLocated(By.partialLinkText("""Entry for > technician"""))) 
// Thread.sleep(3000) // for js-works 
संबंधित मुद्दे