首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从程序集“WebDriver、Version=4.0.0.0、Culture=neutral、PublicKeyToken=null”加载类型“Culture=neutral”

无法从程序集“WebDriver、Version=4.0.0.0、Culture=neutral、PublicKeyToken=null”加载类型“Culture=neutral”
EN

Stack Overflow用户
提问于 2021-08-10 10:54:12
回答 4查看 5K关注 0票数 3

我正在使用C#用selenium和specflow创建自动化测试。今天,由于日志功能,我不得不将Selenium.WebDriver更新为4.0.0-beta4 4版本,它在带有AvailableLogTypes属性的早期版本中有一个错误,该属性总是抛出空引用异常。更新到selenium 4之后,还会出现另一个问题。生成工作正常,没有错误或警告,但是当我运行测试时,会引发以下异常:

代码语言:javascript
复制
Message: 
    System.TypeLoadException : Could not load type 'OpenQA.Selenium.Internal.IWrapsElement' from assembly 'WebDriver, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null'.

Stack Trace: 
    DefaultPageObjectMemberDecorator.CreateProxyObject(Type memberType, IElementLocator locator, IEnumerable`1 bys, Boolean cache)
    DefaultPageObjectMemberDecorator.Decorate(MemberInfo member, IElementLocator locator)
    PageFactory.InitElements(Object page, IElementLocator locator, IPageObjectMemberDecorator decorator)
    PageFactory.InitElements(Object page, IElementLocator locator)
    PageFactory.InitElements(ISearchContext driver, Object page)
    LoginPageElements.ctor(IWebDriver driver) line 12
    PortalSharedPageSteps.CheckUIElementsOfLoginScreen() line 32
    LoginPageTestSteps.CheckUIElementsOfLoginScreenStep() line 21
    BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
    TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments, TimeSpan& duration)
    TestExecutionEngine.ExecuteStep(IContextManager contextManager, StepInstance stepInstance)
    TestExecutionEngine.OnAfterLastStep()
    TestRunner.CollectScenarioErrors()
    LoginPageTestFeature.ScenarioCleanup()
    LoginPageTestFeature.LoginPageTest() line 9

来自硒的官方发布说明:

perv4.0.0a1在https://github.com/SeleniumHQ/selenium/blob/master/dotnet/CHANGELOG中“将IWrapsDriver和IWrapsElement从OpenQA.Selenium.Internal命名空间移到OpenQA.Selenium命名空间。对于绝大多数用户来说,这应该是一个不操作,只需要重新编译代码,因为这两个接口都具有基本命名空间中的返回类型,这意味着用户可能已经在源中为根命名空间”使用"using“语句。如果遇到错误,更改代码中的命名空间和重新构建应该会解决错误。”

我再次检查了OpenQA.Selenium.Internal命名空间的所有出现情况,发现这个名称空间甚至不在我的代码中使用。所以我想一切都会好起来的,但.

后来,我发现如果我删除DotNetSeleniumExtras.PageObjects nuget包,一切都会正常工作。这很好,但我需要这个包才能使用PageFactory.InitElements()来初始化页面对象,并使用FindsBy属性绑定UI元素。我检查了DotNetSeleniumExtras.PageObjects包,它还使用selenium 4。

你有什么办法解决这个问题吗?如果您需要查看源代码,请告诉我(它非常广泛,所以,我不想在这篇文章上大张旗鼓)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-09-10 06:24:27

所以我是如何解决这个问题的:

  1. I从代码中删除了DotNetSeleniumExtras包。

在此之后,我终于能够从浏览器中收集性能日志,因为我消除了question.

  • After删除DotNetSeleniumExtras包中显示的错误--我丢失了用于初始化页面对象的PageFactory。

我通过将所有web元素(页面对象的属性)转换为计算属性:来解决这个问题。

代码语言:javascript
复制
public class PageObject
{
    private readonly IWebDriver driver;         

    public IWebElement PageLink => driver.FindElement(By.XPath(@"my custom XPath"));
    public IWebElement TitleMain => driver.FindElement(By.Id("some Id"));

    // etc

    public PageObject(IWebDriver webDriver)
    {
         driver = webDrvier;
    }
}

下面的代码显示了如何使用上面的类:

代码语言:javascript
复制
var pageObj = new PageObject(driver);
Console.Writeline(pageObj.PageLink.Enabled);

PS:感谢RichEdwards给了我一个解决这个问题的提示

票数 2
EN

Stack Overflow用户

发布于 2021-11-27 16:59:58

从Selenium.WebDriver 4.0开始,需要同时安装Selenium.WebDriver和Selenium.Support nuget包(相同版本)以避免此问题。

票数 1
EN

Stack Overflow用户

发布于 2022-03-16 04:05:21

当为我的WebDriver项目测试将Selenium WebDriver 3升级到WebDriver 4时,我也遇到了同样的问题。简单地从代码中删除DotNetSeleniumExtras包就可以解决这个问题。然后安装DotNetSeleniumExtras.core (4.1)软件包

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68725481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档