2015-03-13 11 views
6

सी # में सेलेनियम webdriver का उपयोग कर कुछ परीक्षण मामलों लिख सकते हैं और एक परिदृश्य जो मैं के अनिश्चित हूँ है की कोशिश कर रहा webdriver कैसेसेलेनियम का चयन नई # खिड़की ग

हल उपयोगकर्ता परिदृश्य एक मरीज के लिए एक मेज खोज कर रहा है, एक मरीज को चुनने के लिए फिर एक नई विंडो खुलती है और फिर विंडो

पर मेरी वस्तुओं पर जोर देती है मेरी समस्या यह है कि मैं कुछ भी करने के लिए नई विंडो का चयन करने में असमर्थ हूं, यह पॉप-अप विंडो नहीं है, यह एक पूर्ण नई ब्राउज़र विंडो है लेकिन यह इसकी पहचान करने के लिए कोई विंडो शीर्षक/नाम नहीं है, मैं इस विंडो में ड्राइवर फ़ोकस कैसे स्विच कर पाऊंगा? अग्रिम

+0

क्या आप विंडो हैंडल के माध्यम से इसे स्विच करने का प्रयास कर सकते हैं? –

उत्तर

8

सेलेनियम वेबड्राइवर में यह वास्तव में आसान है। SwitchTo विधि

driver.SwitchTo().Window(driver.WindowHandles.Last()); 

का उपयोग करके और साथ ही इस ब्लॉग पोस्ट देखें

http://binaryclips.com/2015/03/13/selenium-webdriver-in-c-switch-to-new-window/

+1

मुझे यह त्रुटि संदेश मिल रहा है: 'System.Collections.ObjectModel.ReadOnlyCollection ' में 'अंतिम' की परिभाषा नहीं है और कोई 'एक्सटेंशन' प्रकार 'सिस्टम' के पहले तर्क को स्वीकार नहीं करता है।Collections.ObjectModel.ReadOnlyCollection 'पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) – dmeehan

+2

कृपया अपने कोड सिस्टम का उपयोग कर निर्देश का उपयोग करके इसे जोड़ें .Linq; फिर आप सभी Linq.Enumerables विधियों जैसे प्रथम(), अंतिम() इत्यादि तक पहुंच पाएंगे। – joinsaad

0

में

धन्यवाद अगर मैं इकट्ठा सही ढंग से अपने आवेदन आगे userintervention बिना अपने आप पर खिड़की का उत्पादन करेगा। आपको पृष्ठ लोड होने की प्रतीक्षा करने में सक्षम होना चाहिए और फिर आप अपने आवेषण को सामान्य के रूप में कॉल कर सकते हैं।

सेलेनियम में पहले से ही आपका ब्राउज़र-सत्र है, इसलिए सेलेनियम के लिए एक नई विंडो कोई समस्या नहीं है, यह केवल नई सामग्री है।

0
foreach (string defwindow in driver.WindowHandles) 
{ 
    driver.SwitchTo().Window(defwindow); 
    if(driver.Title == "") 
    { 
    selenium.WindowFocus(); 
    selenium.SelectWindow(""); 
    } 

}  

"" - दर्शाता है कि आपके खिड़की शीर्षक

0

मैं आपको पसंद आ सकते कुछ कोड मिल गया है। पॉपअप फाइंडर का उपयोग करने का सबसे तेज़ समाधान है, लेकिन मैंने अपनी खुद की विधि भी बनाई है। मैं खिड़की हैंडल उचित विंडो का चयन करने के क्रम में कभी भी आदेश पर भरोसा नहीं करता। पॉपअप विंडो खोजक:

PopupWindowFinder finder = new PopupWindowFinder(driver); 
driver.SwitchTo().Window(newWin); 

मेरी कस्टम विधि। असल में आप उस तत्व को पास करते हैं जिसे आप क्लिक करना चाहते हैं, अपने वेबड्राइवर, और वैकल्पिक रूप से तत्व पर क्लिक करने के बाद खोज से पहले प्रतीक्षा करने का समय।

यह आपके सभी मौजूदा हैंडल लेता है और एक सूची बनाता है। यह उस सूची का उपयोग करता है जो पहले से मौजूद विंडोज़ को गलती से स्विच करने से खत्म करने के लिए करता है। फिर यह उस तत्व पर क्लिक करता है जो नई विंडो लॉन्च करता है। क्लिक के बाद हमेशा देरी होनी चाहिए, क्योंकि कुछ भी तुरंत नहीं होता है। और फिर यह एक नई सूची बनाता है और तुलना करता है कि पुराने के खिलाफ जब तक कि यह एक नई विंडो या लूप की अवधि समाप्त न हो जाए। यदि यह एक नई विंडो खोजने में विफल रहता है तो यह शून्य हो जाता है, इसलिए यदि आपके पास एक iffy webelement है जो हमेशा काम नहीं करता है, तो आप यह देखने के लिए एक शून्य जांच कर सकते हैं कि स्विच काम करता है या नहीं।

public static string ClickAndSwitchWindow(IWebElement elementToBeClicked, 
IWebDriver driver, int timer = 2000) 
     { 
      System.Collections.Generic.List<string> previousHandles = new 
System.Collections.Generic.List<string>(); 
      System.Collections.Generic.List<string> currentHandles = new 
System.Collections.Generic.List<string>(); 
      previousHandles.AddRange(driver.WindowHandles); 
      elementToBeClicked.Click(); 

      Thread.Sleep(timer); 
      for (int i = 0; i < 20; i++) 
      { 
       currentHandles.Clear(); 
       currentHandles.AddRange(driver.WindowHandles); 
       foreach (string s in previousHandles) 
       { 
        currentHandles.RemoveAll(p => p == s); 
       } 
       if (currentHandles.Count == 1) 
       { 
        driver.SwitchTo().Window(currentHandles[0]); 
        Thread.Sleep(100); 
        return currentHandles[0]; 
       } 
       else 
       { 
        Thread.Sleep(500); 
       } 
      } 
      return null; 
     } 
0

यह कोड मेरे लिए काम किया। मेरे मामले में नई विंडो/टैब एक पीडीएफ है जिसमें कुछ वजन होता है, इसलिए मैं इसे लोड करते समय कुछ कस्टम इंतजार करता हूं।:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); 
int previousWinCount = driver.WindowHandles.Count; 
// Perform the action to open a new Window 
wait.Until(driver => driver.WindowHandles.Count == (previousWinCount + 1)); 
driver.SwitchTo().Window(driver.WindowHandles.Last()); 
wait.Until(driver => driver.Url.Contains("desired_url_or_a_substring_of_it")); 

ध्यान दें कि driver.Url जब पीडीएफ लोड कर रहा है "रिक्त" के बारे में है।

संबंधित मुद्दे