2017-09-21 6 views
1

J'ai l'intention d'effectuer quelques tests en utilisant du sélénium avec plusieurs navigateurs Web. Pour distinguer entre les différents pilotes web, j'utilise la ligne de code suivante:Comment modifier efficacement le nom de navigateur de l'objet WebDriver?

((RemoteWebDriver) driver).getCapabilities().getBrowserName(); 

Ceci renvoie une chaîne indiquant le navigateur Web qui est utilisé par l'objet driver. Cependant, pour mon objet Opera WebDriver cela me donnera la chaîne 'chrome'. Je l'ai essayé de changer cela en définissant explicitement le nom du navigateur à l « opéra » en utilisant DesiredCapabilities:

DesiredCapabilities capabilities = new DesiredCapabilities(); 
capabilities.setBrowserName("opera"); 
WebDriver driver = new OperaDriver(capabilities); 

Malheureusement, cela ne résout pas mon problème. Comment puis-je modifier efficacement le nom du navigateur Web?

+2

Vous ne pouvez pas faire cela. Il est défini par le pilote pour un navigateur spécifique et il ne peut pas être écrit par votre code. Donc, vous avez besoin d'un autre moyen de stocker cette information et le rappeler –

+0

Je pense que @TarunLalwani a raison – iamsankalp89

+0

Je vais en effet devoir le stocker d'une autre manière alors. Merci! –

Répondre

0

Malheureusement, vous ne pouvez pas modifier BrowserName.

Qu'est-ce que vous pouvez essayer au lieu est de créer la fonction pour gérer spécifiquement les navigateurs multiples: -

package multiBrowser; 
import org.testng.annotations.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.firefox.FirefoxProfile; 
import org.openqa.selenium.firefox.internal.ProfilesIni; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.opera.OperaDriver; 
import org.testng.annotations.Parameters; 



public class MultiBrowserClass { 
WebDriver driver; 
@Test 
@Parameters("browser") 
public void multiBrowsers(String browserName) throws InterruptedException{ 
    if(browserName.equalsIgnoreCase("firefox")){ 
     System.setProperty("webdriver.firefox.marionette","D:\\My Work\\Setup\\JAR\\geckodriver.exe"); 
     ProfilesIni profile = new ProfilesIni();  
     FirefoxProfile myprofile = profile.getProfile("default"); 
     driver = new FirefoxDriver(myprofile); 

    } 
    if(browserName.equalsIgnoreCase("chrome")){ 

     System.setProperty("webdriver.chrome.driver", "D:\\My Work\\Setup\\JAR\\driver\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
    } 
    else if(browserName.equalsIgnoreCase("IE")){ 

     System.setProperty("webdriver.ie.driver", "D:\\My Work\\Setup\\JAR\\driver\\IEDriverServer.exe"); 
     driver = new InternetExplorerDriver(); 
    } 
    else if(browserName.equalsIgnoreCase("opera")){ 

     System.setProperty("webdriver.opera.driver", "D:\\My Work\\Setup\\JAR\\driver\\operadriver.exe"); 
     driver = new OperaDriver(); 

    } 

    driver.manage().window().maximize(); 

    driver.navigate().to("https://"); 

    System.out.println(driver.getTitle()); 

    driver.findElement(By.xpath("//div[@id='navbar-main']/ul/li[5]/a")).click();  
    driver.findElement(By.xpath("//div[@id='navbar-main']/ul/li[5]/ul/li/a")).click(); 
    Thread.sleep(3000); 
    driver.findElement(By.name("email")).clear(); 
    driver.findElement(By.name("email")).sendKeys("[email protected]"); 
    driver.findElement(By.name("password")).clear(); 
    driver.findElement(By.name("password")).sendKeys("1qaz2wsx"); 
    Thread.sleep(3000); 
    driver.findElement(By.xpath("//form[@id='loginform']/div[8]/button")).click(); 
    Thread.sleep(5000); 

    if(driver.getPageSource().contains("Welcome [email protected]")){ 
     System.out.println("User Successfully logged in"); 

    }else{ 
     System.out.println("Username or password you entered is incorrect"); 
    } 

    driver.quit(); 

} 

} 

=======

+0

Merci pour votre réaction, mais cela ne répond pas à ma question. J'ai déjà des fonctionnalités pour initialiser différents objets WebDriver, je voulais juste pouvoir les distinguer après leur initialisation. –

1

Votre exigence de base est d'identifier l'initialisation du navigateur si je suis droit, ce qui peut être fait en obtenant l'agent utilisateur de votre navigateur en utilisant JavascriptExecutor comme suit:

String userAgent = (String) ((JavascriptExecutor) driver).executeScript("return navigator.userAgent;"); 

//following is for identifying opera browser initialization 
if(userAgent.contains("OPR/"){ 

    System.out.println("Browser currently in use is Opera"); 

} 

vous pouvez même identifier les autres navigateurs initilisation par référence this lien

+0

C'est en effet mon exigence. J'ai déjà résolu le problème en stockant les informations ailleurs, mais j'ai testé votre solution par curiosité. Cela fonctionne mais je pense que ma solution actuelle est plus appropriée. Merci quand même! –