【问题标题】:Field *** is never assigned to, and will always have its default value null selenium page factory字段 *** 永远不会分配给,并且将始终具有其默认值 null selenium page factory
【发布时间】:2019-10-31 23:04:18
【问题描述】:

我在使用 selenium 和页面工厂时遇到了问题,我真的不知道还能做什么。

我正在尝试使用以下代码初始化一个元素:

[FindsBy(How = How.Id, Using = "sign-up-btn")]
private IWebElement signUpButton;

但是我不断收到错误消息“字段‘signUpButton’从未分配给,并且将始终具有其默认值 null”

为什么 pagefactor.initelements 不初始化值?

我在基础文件中有这个:

public Page()
{
    PageFactory.InitElements(Driver, this);
}

我的页面文件(主页)正在继承。

为什么不分配变量?

【问题讨论】:

  • 你在任何地方都没有像signUpButton = 这样的代码。
  • 我以前用 pagefactory 和 findsby 不必这样做。我通常做上面的,然后有signupbutton.click()。
  • PageFactory 不是变量。
  • 变量是指 iwebelement signInButton

标签: c# selenium findby


【解决方案1】:

C# 编译器无法判断 PageFactory.InitElements(...) 方法使用类反射为该字段赋值,因此它会报错。如果您愿意,可以忽略此警告。

如果您真的想摆脱它,请将您的字段更改为自动属性:

[FindsBy(How = How.Id, Using = "sign-up-btn")]
public IWebElement SignUpButton { get; set; }

或者你可以直接使用表达式体语法来返回元素,而不是使用类反射:

private IWebElement SignUpButton => Driver.FindElement(By.Id("sign-up-btn"));

【讨论】:

  • 我回家后试试这个。出于好奇,如果我选择忽略该问题,代码会运行吗?
  • @thegoatboy:是的,代码运行良好。这是一个警告,而不是编译器错误。
  • 嗯好的。目前它停止测试,因为 iwebelement 为空。我回家看看会发生什么。
【解决方案2】:

好吧,这是我的错误。

我使用的是using SeleniumExtras.PageObjects;

但我应该一直使用using SeleniumExtras.PageObjects;

我仍然收到 null 错误消息,但更改为 seleniumExtras.pageObjects 并且代码不会失败。

感谢大家的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多