我正在使用C#用selenium和specflow创建自动化测试。今天,由于日志功能,我不得不将Selenium.WebDriver更新为4.0.0-beta4 4版本,它在带有AvailableLogTypes属性的早期版本中有一个错误,该属性总是抛出空引用异常。更新到selenium 4之后,还会出现另一个问题。生成工作正常,没有错误或警告,但是当我运行测试时,会引发以下异常:
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。
你有什么办法解决这个问题吗?如果您需要查看源代码,请告诉我(它非常广泛,所以,我不想在这篇文章上大张旗鼓)。
发布于 2021-09-10 06:24:27
所以我是如何解决这个问题的:
在此之后,我终于能够从浏览器中收集性能日志,因为我消除了question.
我通过将所有web元素(页面对象的属性)转换为计算属性:来解决这个问题。
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;
}
}下面的代码显示了如何使用上面的类:
var pageObj = new PageObject(driver);
Console.Writeline(pageObj.PageLink.Enabled);PS:感谢RichEdwards给了我一个解决这个问题的提示
发布于 2021-11-27 16:59:58
从Selenium.WebDriver 4.0开始,需要同时安装Selenium.WebDriver和Selenium.Support nuget包(相同版本)以避免此问题。
发布于 2022-03-16 04:05:21
当为我的WebDriver项目测试将Selenium WebDriver 3升级到WebDriver 4时,我也遇到了同样的问题。简单地从代码中删除DotNetSeleniumExtras包就可以解决这个问题。然后安装DotNetSeleniumExtras.core (4.1)软件包
https://stackoverflow.com/questions/68725481
复制相似问题