मैं आपको पसंद आ सकते कुछ कोड मिल गया है। पॉपअप फाइंडर का उपयोग करने का सबसे तेज़ समाधान है, लेकिन मैंने अपनी खुद की विधि भी बनाई है। मैं खिड़की हैंडल उचित विंडो का चयन करने के क्रम में कभी भी आदेश पर भरोसा नहीं करता। पॉपअप विंडो खोजक:
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;
}
स्रोत
2016-04-01 14:05:46
क्या आप विंडो हैंडल के माध्यम से इसे स्विच करने का प्रयास कर सकते हैं? –