【问题标题】:C# ChromeDriver throws exception when executed dynamically by reflectionC# ChromeDriver 通过反射动态执行时抛出异常
【发布时间】:2018-03-30 13:27:17
【问题描述】:

我正在尝试在自定义测试运行器中执行使用 selenium Web 驱动程序的测试程序。

在测试运行器中,通过反射调用配备 selenium web driver 的测试方法。

当测试程序由 Visual Studio 测试资源管理器运行时,它工作正常。 通过反射动态运行时会出现问题。

测试程序如下。

namespace TrialWebUnitTest
{
    public class WebDriverTest01
    {
        private IWebDriver driver;

        [TestMethod]
        public void NavigateToSeleniumHQByChrome()
        {
            string TargetUrl = "https://www.seleniumhq.org/projects/webdriver/";
            this.driver = new ChromeDriver();
            driver.Manage().Window.Size = new System.Drawing.Size(1000, 800); // <- driver throws exception here.
            this.driver.Navigate().GoToUrl(TargetUrl);
            this.driver.Dispose();
        }
    }
}

自定义测试运行器的核心测试执行方法如下。

namespace TrialWebUnitTestRunner
{
    public partial class TestForm : Form
    {

        // test button click's event handler.
        private void TestButton_Click(object sender, EventArgs e)
        {
            string retErrorMsg = string.Empty;
            if (!ExecTestDynamically(ref retErrorMsg))
            {
                // show error information in UI textbox.
                this.this.ResultMessage.Text = retErrorMsg;
            }
        }

        internal bool ExecTestDynamically(ref string retErrorMsg)
        {
            var target = new TrialWebUnitTest.WebDriverTest01();
            System.Type targetType = typeof(TrialWebUnitTest.WebDriverTest01);
            var method = targetType.GetMethod("NavigateToSeleniumHQByChrome");
            try
            {
                method.Invoke(target, null);
                return true
            }
            catch (Exception exp)
            {
                retErrorMsg = exp.Message + Environment.NewLine + exp.StackTrance;
                return false;
            }
        }
    }
}

异常信息

System.InvalidOperationException:
断开连接:无法连接到渲染器
(会话信息:chrome=65.0.3325.181)
(驱动信息:chromedriver=2.31.488763


示例程序

我编写了一个示例程序来重现该错误。 请从我的 Dropbox 网址下载:https://db.tt/HqUTMOKWBl

您可以单击该链接并下载“TrialWebTestForInspection.zip”。 请在任意文件夹中解压并找到 TrialWebTestForInspection.sln。

该解决方案包含两个项目,“TrialWebUnitTest”和“TrialWebUnitTestRunner”。 第一个是 MS 单元测试,您可以在 Visual Studio 测试资源管理器中运行 3 种测试方法。

这3种测试方法非常简单。他们只需启动与 webdriver 对应的浏览器,然后导航到 Selenium HQ 站点。

另一个项目是一个 WindowsForm 应用程序,它提供了一个非常简单的测试运行器。 它踢掉了之前测试项目中的测试方法。

当您选择使用 IE 或 FireFox 驱动程序的测试方法时,它工作正常。 另一方面,当您选择 Chrome 驱动程序测试时,它会抛出我上面提到的异常。


我想知道的事情。

首先我想知道,这是当前 Chrome 驱动程序版本的错误,还是规范的一部分。

那我想知道,有没有办法避免这个问题。

我担心的是 IWebDriver 规范原本不支持通过反射运行时的正确操作的可能性。


示例程序规范

.NET Framework 4.6.1 版

nuget 包

  • MSTest.TestFramework.1.2.0 MSTest.TestAdapter.1.2.0 Selenium.WebDriver.3.11.0 Selenium.WebDriver.ChromeDriver.2.37.0 Selenium.WebDriver.IEDriver.3.11.1 Selenium.Firefox.WebDriver.0.20.0

Chrome浏览器版本65.0.3325.181(正式版)(64位)

【问题讨论】:

标签: c# selenium-webdriver selenium-chromedriver


【解决方案1】:

问题解决了。请参考这里。

自定义 TestRunner 应用程序未引用最新的 chrome 驱动程序版本。我必须将 selenium.webdrivers 安装到 testclass 和 testrunner 程序。

更多信息,请参考Github中的以下问题。

https://github.com/SeleniumHQ/selenium/issues/5705

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2019-04-07
    • 2015-10-31
    相关资源
    最近更新 更多