2017-09-21 35 views
1

我打算通過在多個Web瀏覽器中使用硒來執行一些測試。到不同的網絡驅動程序之間進行區分,我使用的代碼下面的行:如何有效更改WebDriver對象的瀏覽器名稱?

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

這將返回一個字符串指示用於由driver對象的web瀏覽器。但是,對於我的Opera WebDriver對象,這會給我字符串'chrome'。我曾嘗試使用DesiredCapabilities瀏覽器的名稱明確地設置爲「歌劇」改變這個:

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

不幸的是,這並沒有解決我的問題。如何有效更改網絡瀏覽器名稱?

+2

你不能這樣做。它由驅動程序爲特定瀏覽器設置,並且不能由您的代碼寫入。所以你需要一些其他的方式來存儲這些信息,並回電 –

+0

我認爲@TarunLalwani是正確的 – iamsankalp89

+0

我確實必須以另一種方式存儲它。謝謝! –

回答

0

不幸的是,您將無法更改BrowserName。

什麼,而不是你可以嘗試是爲專門處理多個瀏覽器創建功能: -

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

謝謝你的反應,但這不能回答我的問題。我已經具有初始化不同WebDriver對象的功能,我只是想在初始化後能夠區分它們。 –

1

你的基本要求是,以確定瀏覽器的初始化,如果我沒錯,這可以通過獲取用戶代理使用JavascriptExecutor瀏覽器來完成如下:

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"); 

} 

同樣可以識別其他瀏覽器通過引用啓動this鏈接

+0

這確實是我的要求。我已經通過在其他地方存儲信息來解決問題,但出於好奇,測試了您的解決方案。它的工作原理,但我認爲我現在的解決方案更適合。不過謝謝! –