admin管理员组

文章数量:1417070

Using the Browserstack SDK i want to run Java Selenium Tests on Browsers : Chrome, Edge and Safari in Browserstack cloud ; however i need to set Browser specific capabilities :

For example,

ChromeOptions args :-

--enable-extension-activity-log-testing

--enable-unsafe-extension-debugging

--trusted-download-sources

--start-maximized

--ignore-certificate-errors

--disable-popup-blocking

--incognito

--enable-download-warning-improvements

--window-size=1920,900

EdgeOptions args :-

--start-maximized

--headless=new

This is the Browserstack SDK YAML configuration available capabilities file : Browserstack SDK capabilities and configuration YAML gist :

"In case both the browserstack.yml file and the test script define capabilities, which ones are prioritized? If you have capabilities declared in both the browserstack.yml file and in test scripts, the SDK merges these capabilities. However, if you have similar capabilities mentioned in both these locations, the capabilities in the browserstack.yml file take precedence."

This is how the RemoteWebDriver is configured in the browserstack SDK Sample project :

    @BeforeMethod(alwaysRun = true)
    public void setUp() throws Exception {
    MutableCapabilities capabilities = new MutableCapabilities();
    HashMap<String, String> bstackOptions = new HashMap<>();
    bstackOptions.put("source", "selenide:sample-master:v1.2");
    capabilities.setCapability("bstack:options", bstackOptions);
    driver = new RemoteWebDriver(new URL(String.format("https://%s:%s@hub- 
    cloud.browserstack/wd/hub", userName, accessKey)), capabilities);
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    WebDriverRunner.setWebDriver(driver);
}

This is the Browserstack Sample project YAML file:

I understand i could do something like the following for the chrome options :

    @BeforeMethod(alwaysRun = true)
    public void setUp() throws Exception {
    MutableCapabilities capabilities = new MutableCapabilities();
    HashMap<String, String> bstackOptions = new HashMap<>();
    bstackOptions.put("source", "selenide:sample-master:v1.2");
    capabilities.setCapability("bstack:options", bstackOptions);
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless=new");
    options.addArguments("window-size=1400,800");
    options.addArguments("disable-gpu");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new RemoteWebDriver(new 
    URL(String.format("https://%s:%s@hub- 
    cloud.browserstack/wd/hub", userName, accessKey)), 
    capabilities);
}

(a) But would the capabilities be merged to the Chrome capabilities existing in the browserstack SDK YAML file (and it didn't work )

(b) Would this change break the other browserstack Edge and Safari sessions tied to the RemoteWebDriver

*Note this is a similar question to this question which didn't seem to answer the question: Setting language for Remotewebdriver - BrowserStack endpoint

Using the Browserstack SDK i want to run Java Selenium Tests on Browsers : Chrome, Edge and Safari in Browserstack cloud ; however i need to set Browser specific capabilities :

For example,

ChromeOptions args :-

--enable-extension-activity-log-testing

--enable-unsafe-extension-debugging

--trusted-download-sources

--start-maximized

--ignore-certificate-errors

--disable-popup-blocking

--incognito

--enable-download-warning-improvements

--window-size=1920,900

EdgeOptions args :-

--start-maximized

--headless=new

This is the Browserstack SDK YAML configuration available capabilities file : Browserstack SDK capabilities and configuration YAML gist :

https://gist.github/prateeksabs/0532c79795463d5806234a320880d911

https://www.browserstack/docs/automate/selenium/sdk-faqs/generic/capability-priority

"In case both the browserstack.yml file and the test script define capabilities, which ones are prioritized? If you have capabilities declared in both the browserstack.yml file and in test scripts, the SDK merges these capabilities. However, if you have similar capabilities mentioned in both these locations, the capabilities in the browserstack.yml file take precedence."

This is how the RemoteWebDriver is configured in the browserstack SDK Sample project :

https://www.browserstack/docs/automate/selenium/getting-started/java/selenide

    @BeforeMethod(alwaysRun = true)
    public void setUp() throws Exception {
    MutableCapabilities capabilities = new MutableCapabilities();
    HashMap<String, String> bstackOptions = new HashMap<>();
    bstackOptions.put("source", "selenide:sample-master:v1.2");
    capabilities.setCapability("bstack:options", bstackOptions);
    driver = new RemoteWebDriver(new URL(String.format("https://%s:%s@hub- 
    cloud.browserstack/wd/hub", userName, accessKey)), capabilities);
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    WebDriverRunner.setWebDriver(driver);
}

This is the Browserstack Sample project YAML file:

https://gist.github/prateeksabs/0532c79795463d5806234a320880d911

I understand i could do something like the following for the chrome options :

    @BeforeMethod(alwaysRun = true)
    public void setUp() throws Exception {
    MutableCapabilities capabilities = new MutableCapabilities();
    HashMap<String, String> bstackOptions = new HashMap<>();
    bstackOptions.put("source", "selenide:sample-master:v1.2");
    capabilities.setCapability("bstack:options", bstackOptions);
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless=new");
    options.addArguments("window-size=1400,800");
    options.addArguments("disable-gpu");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new RemoteWebDriver(new 
    URL(String.format("https://%s:%s@hub- 
    cloud.browserstack/wd/hub", userName, accessKey)), 
    capabilities);
}

(a) But would the capabilities be merged to the Chrome capabilities existing in the browserstack SDK YAML file (and it didn't work )

(b) Would this change break the other browserstack Edge and Safari sessions tied to the RemoteWebDriver

*Note this is a similar question to this question which didn't seem to answer the question: Setting language for Remotewebdriver - BrowserStack endpoint

Share Improve this question edited Feb 5 at 3:10 Krishnan Mahadevan 14.7k6 gold badges38 silver badges70 bronze badges asked Feb 2 at 20:43 MarkMark 231 silver badge6 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

The capabilities defined as part of the browserstack.yml file will take precedence when executing with the BrowserStack's SDK.

We can define the browser specific arguments in the yml file itself for each browsers. For example,

platforms:
- os: OS X
  osVersion: Big Sur
  browserName: Chrome
  browserVersion: latest
  chromeOptions: 
    args: 
    - incognito
    - --start-maximized

本文标签: javaSetting browser specific capabilities using Browserstack SDKStack Overflow