【问题标题】:Setting language for Remotewebdriver - BrowserStack endpoint为 Remotewebdriver 设置语言 - BrowserStack 端点
【发布时间】:2019-06-13 13:04:56
【问题描述】:

我希望以不同的浏览器语言运行我的 selenium 测试。我已经尝试了两个 SO 答案,甚至 BrowserStack 支持都没有成功。

我曾希望这将是一个快速简单的解决方案,但看起来简单的代码以我不理解的方式失败。任何人都可以提供一个工作代码 sn-p,或者一个好主意这个出错的地方吗?

[这个答案]How to set Browser Language using RemoteWebDriver和[这个答案]How to set browser language in selenium remote webdriver capabilities都在下面的代码中试过了:


            DesiredCapabilities DesCaps = new DesiredCapabilities();

            DesCaps.SetCapability("browserstack.user", "your_user");
            DesCaps.SetCapability("browserstack.key", "your_key");


            FirefoxProfile fp = new FirefoxProfile();
            fp.SetPreference("intl.accept_languages", "en-US");
            DesCaps.SetCapability(FirefoxDriver.ProfileCapabilityName, fp);

            ChromeOptions options = new ChromeOptions();
            options.AddArguments("--lang=en-DE");
            DesCaps.SetCapability(ChromeOptions.Capability, options);


            RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://hub-cloud.browserstack.com/wd/hub/"), DesCaps, TimeSpan.FromSeconds(500));

            driver.Navigate().GoToUrl("http://google.com");

            Console.WriteLine("Completed!");
            Console.ReadKey();

当我尝试启动驱动程序时收到异常:

OpenQA.Selenium.WebDriverException
  HResult=0x80131500
  Message=The property '#/' contains additional properties ["BinaryLocation", "LeaveBrowserRunning", "Arguments", "Extensions", "DebuggerAddress", "MinidumpPath", "PerformanceLoggingPreferences", "UseSpecCompliantProtocol", "BrowserName", "BrowserVersion", "PlatformName", "AcceptInsecureCertificates", "UnhandledPromptBehavior", "PageLoadStrategy", "Proxy"] outside of the schema when none are allowed in chromeOptions
  Source=WebDriver
  StackTrace:
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
   at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
   at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout)

【问题讨论】:

    标签: c# selenium browserstack remotewebdriver


    【解决方案1】:

    BrowserStack Support 提供了两个工作示例:

            {
                IWebDriver driver;
    
    
                FirefoxOptions options = new FirefoxOptions();
    
                options.AddAdditionalCapability("browser", "firefox", true);
                options.AddAdditionalCapability("os", "Windows", true);
                options.AddAdditionalCapability("os_version", "10", true);
                options.AddAdditionalCapability("browser_version", "63.0", true);
                options.AddAdditionalCapability("build", "BuildName", true);
                options.SetPreference("intl.accept_languages", "de");
    
                driver = new RemoteWebDriver(new Uri("http://your_username:your_access_key@hub-cloud.browserstack.com/wd/hub/"),
                                             options.ToCapabilities());
    
    
                driver.Navigate().GoToUrl("http://www.google.com");
                Console.WriteLine(driver.Title);
    
                IWebElement query = driver.FindElement(By.Name("q"));
                query.SendKeys("Browserstack");
                query.Submit();
                Console.WriteLine(driver.Title);
    
                Thread.Sleep(2000);
                driver.Navigate().GoToUrl("http://www.amazon.in");
                Console.WriteLine(driver.Title);
    
                driver.Quit();
            }
        }
    

    在 Chrome 中:

      IWebDriver driver;
    
    
                ChromeOptions options = new ChromeOptions();
    
                options.AddAdditionalCapability("browser", "chrome", true);
                options.AddAdditionalCapability("os", "Windows", true);
                options.AddAdditionalCapability("os_version", "10", true);
                options.AddAdditionalCapability("browser_version", "69.0", true);
                options.AddAdditionalCapability("build", "BuildName", true);
    
                options.AddArgument("--lang=de");
    
                driver = new RemoteWebDriver(new Uri("http://your_username:your_access_key@hub-cloud.browserstack.com/wd/hub/"),
                                             options.ToCapabilities());
    
    
                driver.Navigate().GoToUrl("http://www.google.com");
                Console.WriteLine(driver.Title);
    
                IWebElement query = driver.FindElement(By.Name("q"));
                query.SendKeys("Browserstack");
                query.Submit();
                Console.WriteLine(driver.Title);
    
                Thread.Sleep(2000);
                driver.Navigate().GoToUrl("http://www.amazon.in");
                Console.WriteLine(driver.Title);
    
                driver.Quit();
    

    【讨论】:

      【解决方案2】:

      从代码 sn-p 中,我看到您在同一脚本中指定了 Chrome 和 Firefox 的浏览器选项。您需要为 Chrome 和 Firefox 准备一个单独的测试脚本。

      -用于在 Chrome 浏览器上创建会话,包括以下功能

      DesiredCapabilities capability;
      
      ChromeOptions options = new ChromeOptions();
      // Set browser language to French 
      options.AddArguments("--lang=fr");
      capability = (DesiredCapabilities)options.ToCapabilities();
      
      capability.SetCapability("browser", "chrome");
      capability.SetCapability("browser_version", "61");
      capability.SetCapability("os", "Windows");
      capability.SetCapability("os_version", "7");
      capability.SetCapability("browserstack.user", "USERNAME");// add username
      capability.SetCapability("browserstack.key", "ACCESS_KEY"); //add automate-key
      
      driver = new ScreenShotRemoteWebDriver(new Uri("http://hub-cloud.browserstack.com/wd/hub/"), capability);
      

      -用于在 Firefox 浏览器上创建会话,包括以下功能

      DesiredCapabilities capability = new DesiredCapabilities();
      capability.SetCapability("browser", "Firefox");
      capability.SetCapability("browser_version", "63.0");
      capability.SetCapability("os", "Windows");
      capability.SetCapability("os_version", "10");
      capability.SetCapability("browserstack.user", "your_usernmae");
      capability.SetCapability("browserstack.key","your_access_key");
      
      FirefoxProfile firefoxProfile = new FirefoxProfile();
      firefoxProfile.SetPreference("intl.accept_languages", "fr");
      capability.SetCapability(FirefoxDriver.ProfileCapabilityName, firefoxProfile.ToBase64String());
      

      有关使用 C# 传递浏览器选项的更多信息,请参阅 - https://www.browserstack.com/automate/c-sharp

      【讨论】:

      • 运行你的 chrome 代码(我还没有尝试过 Firefox)会生成一个 Invalid CastException..System.InvalidCastException: 'Unable to cast object of type 'OpenQA.Selenium.Remote.ReadOnlyDesiredCapabilities' to type 'OpenQA.Selenium.Remote.DesiredCapabilities'.' 你的代码运行成功了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多