2015-10-19 10 views
9

Voglio testare le mie casi di test in finestra privata o incognito finestra.Come aprire la finestra in incognito/privata con Selenium WD per diversi tipi di browser?

Come fare lo stesso in vari browser:

  • firefox (preferito)
  • cromo (preferito)
  • IE
  • safari
  • opera

Come raggiungerlo?

+1

google sa ... hai chiesto? – JeffC

+0

Possibile duplicato di [Esegui browser chrome in inconginto Mode in Selenium] (http://stackoverflow.com/questions/19026295/run-chrome-browser-in-inconginto-mode-in-selenium) – JeffC

+1

@JeffC Ho chiesto a Google , e mi ha portato qui - sfacciato bastardo: p – hd1

risposta

0

Trova l'elemento del corpo sulla pagina e poi attiva una chiave di accordo per il browser che desideri. Nell'esempio seguente ho cercato di astrarre i browser per un'enumerazione che delinea il comportamento per newTab, newWindow e newIncognitoWindow. Ho creato contenuti FF, IE, Chrome, Safari e Opera; tuttavia, potrebbero non essere pienamente implementati a causa della mia mancanza di conoscenza.

/** 
    * Enumeration quantifying some common keystrokes for Browser Interactions. 
    * 
    * @see "http://stackoverflow.com/questions/33224070/how-to-open-incognito-private-window-through-selenium-java" 
    * @author http://stackoverflow.com/users/5407189/jeremiah 
    * @since Oct 19, 2015 
    * 
    */ 
    public static enum KeystrokeSupport { 
     CHROME, 
     FIREFOX { 
      @Override 
      protected CharSequence getNewIncognitoWindowCommand() { 
       return Keys.chord(Keys.CONTROL, Keys.SHIFT, "p"); 
      } 
     }, 
     IE { 
      @Override 
      protected CharSequence getNewIncognitoWindowCommand() { 
       return Keys.chord(Keys.CONTROL, Keys.SHIFT, "p"); 
      } 
     }, 
     SAFARI { 
      @Override 
      protected CharSequence getNewTabCommand() { 
       throw new UnsupportedOperationException("Author does not know this keystroke"); 
      } 

      @Override 
      protected CharSequence getNewWindowCommand() { 
       throw new UnsupportedOperationException("Author does not know this keystroke"); 
      } 

      @Override 
      protected CharSequence getNewIncognitoWindowCommand() { 
       throw new UnsupportedOperationException("Author does not know this keystroke"); 
      } 
     }, 
     OPERA { 
      @Override 
      protected CharSequence getNewIncognitoWindowCommand() { 
       throw new UnsupportedOperationException("Author does not know this keystroke"); 
      } 
     }; 

     public final void newTab(WebDriver driver) { 
      WebElement target = getKeystrokeTarget(driver); 
      target.sendKeys(getNewTabCommand()); 
     } 

     public final void newWindow(WebDriver driver) { 
      WebElement target = getKeystrokeTarget(driver); 
      target.sendKeys(getNewWindowCommand()); 
     } 

     public final void newIncognitoWindow(WebDriver driver) { 
      WebElement target = getKeystrokeTarget(driver); 
      target.sendKeys(getNewIncognitoWindowCommand()); 
     } 

     protected CharSequence getNewTabCommand() { 
      return Keys.chord(Keys.CONTROL, "t"); 
     } 

     protected CharSequence getNewWindowCommand() { 
      return Keys.chord(Keys.CONTROL, "n"); 
     } 

     protected CharSequence getNewIncognitoWindowCommand() { 
      return Keys.chord(Keys.CONTROL, Keys.SHIFT, "t"); 
     } 

     protected final WebElement getKeystrokeTarget(WebDriver driver) { 
      WebDriverWait wait = new WebDriverWait(driver, 10); 
      return wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body"))); 
     } 

    } 

Con questo allora, possiamo offrire un test con parametri che verrà eseguito attraverso ciascuna delle configurazioni ed eseguire i comportamenti per verifica visiva. Potresti voler aggiungere qualunque cosa tu voglia testare.

package stackoverflow.proof.selenium; 

import java.util.Collection; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 


import com.google.common.base.Supplier; 
import com.google.common.collect.Lists; 



/** 
* Test to try out some various browser keystrokes and try to get the environment to do what we want. 
* 
* @see "http://stackoverflow.com/questions/33224070/how-to-open-incognito-private-window-through-selenium-java" 
* @author http://stackoverflow.com/users/5407189/jeremiah 
* @since Oct 19, 2015 
* 
*/ 
@RunWith(Parameterized.class) 
public class KeyStrokeTests { 


    @Parameters(name="{0}") 
    public static Collection<Object[]> buildTestParams() { 
     Collection<Object[]> params = Lists.newArrayList(); 
     Supplier<WebDriver> ffS = new Supplier<WebDriver>() { 
      public WebDriver get() { 
       return new FirefoxDriver(); 
      } 
     }; 
     params.add(new Object[]{KeystrokeSupport.FIREFOX, ffS}); 

     /* I'm not currently using these browsers, but this should work with minimal effort. 
     Supplier<WebDriver> chrome = new Supplier<WebDriver>() { 
      public WebDriver get() { 
       return new ChromeDriver(); 
      } 
     }; 
     Supplier<WebDriver> ie = new Supplier<WebDriver>() { 
      public WebDriver get() { 
       return new InternetExplorerDriver(); 
      } 
     }; 
     Supplier<WebDriver> safari = new Supplier<WebDriver>() { 
      public WebDriver get() { 
       return new SafariDriver(); 
      } 
     }; 
     Supplier<WebDriver> opera = new Supplier<WebDriver>() { 
      public WebDriver get() { 
       return new OperaDriver(); 
      } 
     }; 

     params.add(new Object[]{KeystrokeSupport.CHROME, chrome}); 
     params.add(new Object[]{KeystrokeSupport.IE, ie}); 
     params.add(new Object[]{KeystrokeSupport.SAFARI, safari}); 
     params.add(new Object[]{KeystrokeSupport.OPERA, opera}); 
     */ 
     return params; 
    } 
    Supplier<WebDriver> supplier; 
    WebDriver driver; 
    KeystrokeSupport support; 

    public KeyStrokeTests(KeystrokeSupport support,Supplier<WebDriver> supplier) { 
     this.supplier = supplier; 
     this.support = support; 
    } 

    @Before 
    public void setup() { 
     driver = supplier.get(); 
     driver.get("http://google.com"); 
    } 

    @Test 
    public void testNewTab() { 
     support.newTab(driver); 
    } 
    @Test 
    public void testNewIncognitoWindow() { 
     support.newIncognitoWindow(driver); 
    } 

    @Test 
    public void testNewWindow() { 
     support.newWindow(driver); 
    } 

    @After 
    public void lookAtMe() throws Exception{ 
     Thread.sleep(5000);  
      for (String handle : driver.getWindowHandles()) { 
      driver.switchTo().window(handle); 
      driver.close(); 
     } 
    } 
    } 

Meglio di fortuna.

+1

Odio le idee di seing, che potrebbero funzionare, ma con pochi voti negativi e senza commenti cosa c'è di sbagliato in questo. – parvuselephantus

8

In chrome è possibile provare a utilizzare lo switch della riga di comando -incognito nelle opzioni, non sono sicuro se ci sarà un problema con l'estensione di automazione, ma vale la pena provare.

ChromeOptions options = new ChromeOptions(); 
options.addArguments("incognito"); 

per Firefox, una bandiera speciale nel profilo può essere utilizzato per lo scopo

FirefoxProfile firefoxProfile = new FirefoxProfile();  
firefoxProfile.setPreference("browser.private.browsing.autostart",true); 

Per IE

setCapability(InternetExplorerDriver.IE_SWITCHES, "-private"); 
+1

Il codice sopra per firefox non funziona nel mio caso. – Ronak

16
  • Chrome:

    DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
    ChromeOptions options = new ChromeOptions(); 
    options.addArguments("incognito"); 
    capabilities.setCapability(ChromeOptions.CAPABILITY, options); 
    
  • FireFox:

    FirefoxProfile firefoxProfile = new FirefoxProfile();  
    firefoxProfile.setPreference("browser.privatebrowsing.autostart", true); 
    
  • Internet Explorer:

    DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); 
    capabilities.setCapability(InternetExplorerDriver.FORCE_CREATE_PROCESS, true); 
    capabilities.setCapability(InternetExplorerDriver.IE_SWITCHES, "-private"); 
    
  • Opera:

    DesiredCapabilities capabilities = DesiredCapabilities.operaBlink(); 
    OperaOptions options = new OperaOptions(); 
    options.addArguments("private"); 
    capabilities.setCapability(OperaOptions.CAPABILITY, options); 
    
+1

Per il visitatore futuro, questo non funziona con il selenio 2.53, funziona con 2.52. – pr4bh4sh

+0

Quali punti non funzionano? Usiamo Selenium 3.0.1 e tutto funziona correttamente. – agabrys

+1

Sì, funziona con 3.0.1, Purtroppo non sono in grado (leggi permesso) di eseguire l'aggiornamento alla versione più recente. Ho perso più di 2 ore Quindi ho pensato che potrebbe essere utile per qualcuno che si trova ad affrontare lo stesso problema. – pr4bh4sh

0

Per Chrome utilizzare questo codice per aprire il browser in modalità in incognito:

0
public static void OpenBrowser() { 
    if (Browser.equals("Chrome")) { 
     System.setProperty("webdriver.chrome.driver", "E:\\Workspace\\proj\\chromedriver.exe"); 
     DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("incognito"); 
     capabilities.setCapability(ChromeOptions.CAPABILITY, options); 
     driver = new ChromeDriver(capabilities); 
    } else if (Browser.equals("IE")) { 

     DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); 
     capabilities.setCapability(InternetExplorerDriver.FORCE_CREATE_PROCESS, false); 
// if you get this exception "org.openqa.selenium.remote.SessionNotFoundException: " . uncomment the below line and comment the above line 
// capabilities.setCapability(InternetExplorerDriver.FORCE_CREATE_PROCESS, true); 
     System.setProperty("webdriver.ie.driver", "E:\\Workspace\\proj\\IEDriverServer32.exe");capabilities.setCapability(InternetExplorerDriver.IE_SWITCHES, "-private"); 
     driver = new InternetExplorerDriver(capabilities); 
    } else { 
     FirefoxProfile firefoxProfile = new FirefoxProfile(); 
     firefoxProfile.setPreference("browser.privatebrowsing.autostart", true); 
     driver = new FirefoxDriver(firefoxProfile); 
    } 
Problemi correlati