2013-02-18 46 views
6

का उपयोग कर पॉपअप विंडो को संभालना मेरे पास एक परिस्थिति है जिसमें एक लिंक वेबपृष्ठ पर क्लिक करने से पॉपअप विंडो खुलती है। और पॉपअप विंडो खुलने के बाद पॉपअप विंडो में फोकस है और मास्टर विंडो अक्षम है। और मैं पॉपअप विंडो में नियंत्रण को स्थानांतरित करने में असमर्थ हूं। कृपया निम्नलिखित कोड देखें।सेलेनियम

driver.findElement(By.linkText("Click me")).click();// when this line of code is reached then a popup window opens. 

System.out.println("After Clicking me"); // After the popup window opens this line of code is never executed. 

मैं मूल विंडो से पॉपअप विंडो में नियंत्रण स्थानांतरित करने में असमर्थ हूं। मुझे निम्नलिखित कमांड से अवगत है।

driver.switchTo().window("popup window"); 

लेकिन इससे ज्यादा मदद नहीं मिल रही है। क्रिप्या मेरि सहायता करे।

उत्तर

7

यह एक कोड है जिसका उपयोग मैं करता हूं जब मुझे निम्न पॉप-अप विंडो के साथ काम करने की आवश्यकता होती है, इसे बंद करें और मेरी मुख्य विंडो पर वापस जाएं। बेशक यह इस उत्तर के उद्देश्य के लिए सरलीकृत किया गया है। यह मूल खिड़की (मुख्य) के एक हैंडल को बनाए रखता है ताकि यह दूसरों के बीच एक अंतर बना सके।

यह एक स्पष्ट WebDriverWait क्योंकि मैं विकास के दौरान समस्याओं कि कोड से पहले खिड़की वास्तव में खोल रखी चलाने गया था की आवश्यकता है, तो यह एक आदर्श स्थिति नहीं हो सकता है,

function manipulatePopUp(final WebDriver driver, final WebDriverWait wait) { 
    final String mainWindowHandle = driver.getWindowHandle(); 
    driver.findElement(By.id("linkThatOpensPopUp")).click(); 

    wait.until(new ExpectedConditions<Boolean>() { 
     @Override 
     public Boolean apply(WebDriver d) { 
      return (d.getWindowHandles().size() != 1); 
     } 
    }); 

    for (String activeHandle : driver.getWindowHandles()) { 
     if (!activeHandle.equals(mainWindowHandle)) { 
      driver.switchTo().window(activeHandle); 
     } 
    } 

    driver.close(); 
    driver.switchTo().window(mainWindowHandle); 
} 
+0

आप wait.until विधि वाक्य रचना और उस में तर्क के बारे में अधिक के बारे में समझाएं कर सकते हैं? –

+1

वैसे, driver.getWindowHandles() एक सेट को एक सूची नहीं देता है। –

+0

प्रतीक्षा मूल रूप से लूपिंग रखता है जब तक चालक के पास एक से अधिक हैंडल नहीं होते हैं, इसका मतलब है कि मुझे यह सुनिश्चित करने के लिए उचित समय देना है कि पॉप-अप अब बातचीत के लिए तैयार है। – aimbire

9

driver.findElement (तक .linkText ("मुझे क्लिक करें"))। क्लिक करें(); // जब कोड की यह पंक्ति तक पहुंच जाती है तो पॉपअप विंडो खुलती है।

System.out.println ("मुझे क्लिक करने के बाद"); // पॉपअप विंडो खोलने के बाद कोड की इस पंक्ति को कभी निष्पादित नहीं किया जाता है।

कोड की रेखा कभी निष्पादित नहीं होती है क्योंकि प्रक्रिया पॉपअप को संभालने की प्रतीक्षा कर रही है।

getWindowHandles() इस स्थिति में ठीक से काम करता है।

उदाहरण:

//handle of the master window before clicking the link 
String master = driver.getWindowHandle(); 

driver.findElement(By.linkText("Click me")).click(); 

//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop. 
int timeCount = 1; 

do 
{ 
    driver.getWindowHandles(); 
    Thread.sleep(200); 
    timeCount++; 
    if (timeCount > 50) 
    { 
     break; 
    } 
} 
while (driver.getWindowHandles().size == 1); 

//Assigning the handles to a set 
Set<String> handles = driver.getWindowHandles(); 
//Switching to the popup window. 
for (String handle : handles) 
{ 
    if(!handle.equals(master)) 
    { 
     driver.switchTo().window(handle); 
    } 
} 

अब ड्राइवर पॉपअप विंडो पर स्विच किया गया। यदि पॉपअप विंडो में एक फ्रेम है तो आपको इसमें तत्वों की पहचान करने से पहले फ्रेम पर स्विच करने की आवश्यकता है।

0
public class socialSignOn extends masterBaseClassNewSiteStage { 

    @Test 
    public void testSocialSignOn() throws Throwable { 
     openParticularUrl("/my-lfc/join/user-details?user_type=free"); 

     driver.findElement(By.cssSelector("#socialSignOn > div.left.socialLogin.googleButton")).click(); 

     String MainWindow = driver.getWindowHandle(); 

     for (String activeHandle : driver.getWindowHandles()) { 
      if (!activeHandle.equals(MainWindow)) { 
       driver.switchTo().window(activeHandle); 
      } 
     } 
     driver.findElement(By.cssSelector("#Email")).sendKeys(""); 
     driver.findElement(By.cssSelector("#next")).click(); 
     pauseFiveSeconds(); 
     driver.findElement(By.cssSelector("#Passwd")).sendKeys(""); 
     driver.findElement(By.cssSelector("#signIn")).click(); 
     pauseOneSecond(); 
     driver.switchTo().window(MainWindow); 
     pauseTenSeconds(); 
     closeDriver(); 
    } 
} 
-1
// delay : max number of seconds 
new WebDriverWait(driver, delay * 1000).until(ExpectedConditions.alertIsPresent()); 
drive`enter code here`r.switchTo().alert().accept();