2012-06-28 26 views
5

परीक्षण के दौरान 2 विंडो पॉप आउट आती हैं।सेलेनियम वेबड्राइवर विंडो हैंडल सी # स्विच करने में असफल

मेरी कोड:

string BaseWindow = driver.CurrentWindowHandle;     
ReadOnlyCollection<string> handles = driver.WindowHandles; 

foreach(string handle in handles)      
{       
Boolean a=driver.SwitchTo().Window(handle).Url.Contains("Main"); 
if (a == true) 
{  
InitialSetting.driver.SwitchTo().Window(handle);  
break; 
} 
}     

मैं खिड़की जो यूआरएल "मुख्य" शामिल करने के लिए स्विच करना चाहते हैं। लेकिन जब परीक्षण चल रहा है, तो यह लगातार दो खिड़कियों के बीच स्विच करता है और यह रुकता नहीं है।

मैंने डीबग किया और पाया foreachboolean a सत्य होने पर भी तोड़ नहीं आया।

मैं इसे कैसे हल कर सकता हूं?

+0

क्या जब बूलियन बताए switchTo() एक 2 बार बिना अगर आप सिर्फ तोड़ने होता है, के बाद से आप पहले से ही बंद कर दिया है। – VolkerK

उत्तर

11
//switch to new window 
driver.FindElement(By.Id("link")).Click(); 

//wait for new window to open 
Thread.Sleep(2000); 

//get the current window handles 
string popupHandle = string.Empty; 
ReadOnlyCollection<string> windowHandles = driver.WindowHandles; 

foreach (string handle in windowHandles) 
{ 
    if (handle != existingWindowHandle) 
    { 
     popupHandle = handle; break; 
    } 
} 

//switch to new window 
driver.SwitchTo().Window(popupHandle); 

//check for element on new page 
webElement = driver.FindElement(By.Id("four04msg")); 
if(webElement.Text == "THE CONTENT YOU REQUESTED COULDN’T BE FOUND...") 
{ 
    return false; 
} 
else 
{ 
    return true; 
} 

//close the new window to navigate to the previous one 
driver.close(); 

//switch back to original window 
driver.SwitchTo().Window(existingWindowHandle); 
+1

आपको 'मौजूदाविंडो हैंडल' कैसे मिलता है? –

+0

मौजूदा WindowHandle = driver.CurrentWindowHandle; –

+0

@ माइकल ऐयर्स मैं वर्तमान विंडो (मौजूदा विंडो जो मैन्युअल रूप से खोला गया है) को हैंडल कैसे प्राप्त कर सकता हूं, जिसे ड्राइवर द्वारा खोला नहीं गया है, जिसका मतलब है कि मैं driver.getWindowHandle() का उपयोग नहीं कर सकता; –

3
  1. मूल पोस्ट कोड का उपयोग करना।

    string existingWindowHandle = driver.CurrentWindowHandle;

    इसके पहले खिड़की।

  2. एक महत्वपूर्ण बात यह है:

    नहीं विंडोज शीर्षक नाम के रूप में:

    ReadOnlyCollection<string> windowHandles = driver.WindowHandles

    , के लिए उदाहरण संग्रह windowHandles सकता है शामिल स्ट्रिंग नाम वस्तु, नहीं विंडोज शीर्षक नाम में शामिल है {Menu},{PopUp}
    इसमें है: {45e615b3-266f-4ae0-a508-e901f42a36d3},{c6010037-0be6-4842-8d38-7f37c2621e81}

-1
 IWebDriver popup = null; 
     string mainWindow = driver.CurrentWindowHandle; 
     bool foundPopupTitle = false; 
     foreach (string handle in driver.WindowHandles) 
     { 
      popup = driver.SwitchTo().Window(handle); 
      if (popup.Title.Contains(title)) 
      { 
       foundPopupTitle = true; 
       break; 
      } 
     } 

     if (foundPopupTitle) 
     { 
      popup.Close(); 
     } 
     //switch back to original window 
     driver.SwitchTo().Window(mainWindow); 
+0

3 साल पुरानी पोस्ट पर कोड-केवल उत्तर ही किसी की सहायता नहीं करते हैं। कम से कम एक स्पष्टीकरण प्रदान करें (और वास्तव में, यह मौजूदा लोगों की तुलना में बेहतर होना चाहिए) – BradleyDotNET

+0

कोड-केवल उत्तर मेरे लिए पूरी तरह से काम करता है। कोड डेवलपर को शब्दों की तुलना में अधिक स्पष्ट है। और यह जवाब बेहतर है कि यह कई पॉप-अप के परिदृश्य में काम करता है। पहला जवाब केवल 1 पॉपअप के लिए काम करता है। –