2017-09-06 1 views
2

In meinem Projekt gibt es einen Werbeprovider, der uns Popup-Werbung zeigt, aber Problem ist, dass Pop-up kommen wird, ist es nicht behoben. Manchmal add not show kommt manchmal dieser pop up nach 1 Minute und unterbricht meinen Testfall.Wie man mit externem Popup mit Selen umgehen kann

Ich schreibe einen Code zum Schließen dieses Popup, aber es ist keine perfekte Lösung, denke ich..Wenn jemand helfen kann?

boolean Imclose = wd.findElement(By.xpath(".//*[@class='IM_overlay_close_container IM_overlay_close_button']")).isDisplayed(); 
    if (Imclose == true) { 
     wd.findElement(By.xpath(".//*[@class='IM_overlay_close_container IM_overlay_close_button']")).click(); 
    } 
+0

Verwenden Sie Alert-Schnittstelle – iamsankalp89

+0

können Sie mir bitte ein Beispiel zeigen? – zsbappa

+0

Ist diese Seite öffentlich, so dass ich mir genau ansehen kann, womit Sie es zu tun haben und es einfacher ist, Ihnen zu helfen. Ich nehme an, das Pop-up ist vielleicht kein Alarm, sondern ein iframe/modal. – Subh

Antwort

-1

Eigentlich kommt es nach 30-50 Sekunden, also müssen Sie warten und dann auf Schließen klicken.

System.setProperty("webdriver.chrome.driver", "E:\\software and tools\\chromedriver_win32\\chromedriver.exe"); 
WebDriver driver = new ChromeDriver(); 
driver.get("https://www.rentbyowner.com/usa"); 
driver.manage().window().maximize(); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 
WebElement ad=driver.findElement(By.xpath(".//*[@id='IM_target_overlay']/div/div/div/div[1]/a/div")); 
WebDriverWait wait= new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.visibilityOf(ad)); 
ad.click(); 

Siehe diesen Link für weitere Informationen:

Handling Alerts in Selenium Webdriver

+0

Ich habe versucht, Ihren Code, aber es funktioniert nicht, um die Popup-Seite zu schließen, habe ich auch die Wartezeit für '180' Sekunden zur Verfügung gestellt, dann erscheint Popup-Seite, aber wenn ich versuche, auf Schließen zu klicken Schaltfläche oder Text, öffnet es einfach das andere Browserfenster. –

+0

Bitte bieten Lösung dann, wie es in meinem PC funktioniert – iamsankalp89

0

ich beobachtete, dass dies ein normaler Pop-up-Overlay über die Webseite und nicht ein Alarm und es erscheint fast innerhalb von 60 Sekunden. Der folgende Code könnte also nur für dich funktionieren.

//Waiting for the Popup to appear 
WebDriverWait wait = new WebDriverWait(driver,60); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class,'IM_overlay_foreground')]"))); 

//Clicking on the 'Close' text to close the popup. 
driver.findElement(By.xpath("//div[contains(@class,'IM_overlay_foreground')]//span[@class='IM_close_text']")).click(); 

HINWEIS: Sie die Zeit von 60 bis 90 erhöhen, falls scheint es länger zu dauern. Wenn das Popup innerhalb des festgelegten Zeitraums erscheint, wird es behandelt (wie in Closed).

+1

Ich habe versucht, Ihren Code, aber es funktioniert nicht, um die Popup-Seite zu schließen, habe ich auch die Wartezeit für 180 Sekunden zur Verfügung gestellt, dann Popup-Seite wird angezeigt, aber wann Ich versuche auf die Schaltfläche oder den Text zu klicken, es öffnet einfach das andere Browserfenster. –

+0

@Jainish, Danke für die Überprüfung und Analyse. Ich hatte zu diesem Zeitpunkt noch keine Ressourcen, um das zu sehen :) Wenn die Schaltfläche 'Schließen' angeklickt wird, schließt sie das Popup und öffnet gleichzeitig ein neues Fenster. Die obige Codezeile entspricht tatsächlich dem, was OP angefordert hat. Das Schließen eines neuen Fensters ist nur eine Option. Weitere Erläuterungen finden Sie im Kommentarbereich Ihrer Antwort. – Subh

1

Versuchen Sie diesen Code, um die unerwünschte Popup-Seite zu behandeln. Ich habe 180 Sekunden warten lassen. Klicken Sie dann auf den Schließen-Button in der Werbe-Popup-Seite.

Nach dem Klick auf Werbung Popup-Seite öffnet sich ein anderes Fenster, also muss ich zu meinem Hauptfenster umleiten, dann wird nur weiterer Code ausgeführt.

driver.get("https://www.rentbyowner.com/usa"); 
driver.manage().window().maximize(); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 

    try 
    {   
      WebDriverWait wait = new WebDriverWait(driver, 180); 
      wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div[contains(@class,'IM_overlay_foreground')]")))); 
      driver.findElement(By.xpath("//div[contains(@class,'IM_overlay_foreground')]//span[@class='IM_close_text']")).click(); 


      try 
      { 
       String winHandleBefore = driver.getWindowHandle(); 
       for(String winHandle : driver.getWindowHandles()) 
       { 
        driver.switchTo().window(winHandle); 
        //driver.switchTo().window(winHandle).close(); 
       } 
       driver.switchTo().window(winHandleBefore); 

       //Verify purpose written code, weather my driver is getting move to parent window or not. 

       WebDriverWait element = new WebDriverWait(driver, 10); 
       element.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("top_k_search")))); 
       driver.findElement(By.id("top_k_search")).clear(); 
       System.out.println("Try block"); 
      } 
      catch(Exception a) 
      { 
       System.out.println("Inner Catch"); 
      } 
     } 
     catch(Exception e) 
     { 
      System.out.println("Element not present"); 
      //Provide your code here.. 
     } 
+0

Haben Sie diesen Code versucht? –

+0

** Der Griff des neuen Fensters wird nicht umgeschaltet, wenn die Schaltfläche 'Schließen' angeklickt wird. Der Fokus liegt ausschließlich auf dem Eltern-/Hauptfenster. ** Wenn Sie jedoch das neue/untergeordnete Fenster schließen möchten, verwenden Sie den Code wie oben, um ihn zu wechseln und zu schließen.Aber der Hauptzweck des Schließens von Popup wird bereits in den ersten 3 Codezeilen im äußeren "try-catch block" behandelt. – Subh

+0

Danke für deinen Kommentar Subh. Aber irgendwie Pop-up-Seite wird nicht geschlossen, also versuche ich diese Lösung. –

Verwandte Themen