检查运行WebDriver实例的浏览器选项的通用方法

时间:2017-11-29 18:04:57

标签: c# google-chrome selenium firefox selenium-webdriver

我有一个通用方法,最终返回ChromeDriver或FirefoxDriver实例,并提供参数作为选项,例如使用ChromeDriver:

// Example using ChromeDriver, but also applies to FirefoxDriver
var options = new ChromeOptions();
options.AddArguments("foo", "bar", "headless");
return new ChromeDriver(options);

现在我想测试WebDriver的实例是否实际上有那些提供的参数,但我还没有找到一种方法以通用方式执行此操作。

我尝试了以下代码来检查提供的参数是否存储在浏览器功能中,但是我无法使用ChromeDriver找到它们。

// Using cast because of generic method
var capabilities = ((ChromeDriver)driver).Capabilities 

无头模式

我要检查的选项/参数之一是在无头模式下运行。我可以为Chrome和Firefox做到这一点。

检查Chrome的无头模式:

var userAgent = driver.ExecuteScript("return window.navigator.userAgent");

在无头模式下运行时,使用

返回包含'headless'的字符串
var windowChrome = driver.ExecuteScript("return window.chrome");

如果在无头模式下运行,则返回null;如果没有以无头模式运行,则返回对象。

但是这些方法不适用于Firefox,window.chrome显然不起作用,但是当比较非无头和无头的用户之间的Firefox时,它们是完全相同的:

非无头模式

  

Mozilla / 5.0(Windows NT 10.0; Win64; x64; rv:57.0)Gecko / 20100101 Firefox / 57.0

无头模式

  

Mozilla / 5.0(Windows NT 10.0; Win64; x64; rv:57.0)Gecko / 20100101 Firefox / 57.0

要检查Firefox的无头模式,我可以使用它,但它不适用于其他浏览器

var headless = ((FirefoxDriver)driver).Capabilities.GetCapability("moz:headless");

我想这表明我不能单靠功能。

上面的示例仅用于检查无头模式,但我想找到一种方法,在创建WebDriver实例后,以通用方式检查BrowserOptions提供的不同参数。如果有一种使用JavaScript的方法很好,但我更喜欢使用Selenium WebDriver。

这是我目前检查无头模式的示例,我希望能够将其应用于其他BrowserOptions,但我必须首先找到它们:)。

if (typeof(TWebDriver) == typeof(ChromeDriver))
    runsHeadless = driver.ExecuteScript<string>("return window.navigator.userAgent").ToLowerInvariant().Contains("headless");
else if (typeof(TWebDriver) == typeof(FirefoxDriver))
    runsHeadless = Convert.ToBoolean(((FirefoxDriver)driver).Capabilities.GetCapability("moz:headless"));
else
    throw new NotImplementedException($"WebDriver of type {typeof(TWebDriver)} is not yet supported.");

Assert.That(runsHeadless);

0 个答案:

没有答案