提问者:小点点

IWebElement在使用PageFactory初始化时没有属性


当我像这样声明我的IWebElement时:

[FindsBy(How = How.CssSelector, Using = "input#raffle_submit")]
private IWebElement _buyNowButton;

并使用PageFactory在类构造函数中初始化它:

PageFactory.InitElements(Driver, this);

然后,当我在任何方法中设置断点以查看元素的属性时,我在该元素中看不到任何属性:

public CartObj ClickBuyNowButton()
{
     _buyNowButton.Click(); //here is my break point
}

我看到的唯一属性是:-非公共成员:http://prntscr.com/8k90r4

那么,IWebElement中必须包含的所有属性在哪里,例如“已启用”、“显示”等?

更重要的是:我使用这个元素没有任何问题,我可以单击它,我可以向它发送密钥,但是当我使用下一个JavaScript代码时,它告诉我参数是错误的(但它以前工作得很好):

((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView();", webElement);

执行上面JS代码后出现的错误:

 Additional information: Argument is of an illegal 
    typeOpenQA.Selenium.Support.Events.EventFiringWebDriver+EventFiringWebElement

我肯定它与WebDriver的版本有关。

所以我目前的WebDriver版本是2.47.0

ChromDriver版本是2.19


共1个答案

匿名用户

关于你的第一个问题:你在调试器中看到的实际上只是一个代理对象。PageFactory用代理初始化你的_buyNowButton,只有当你在脚本中的某个地方使用它时,它才会被解析。所以除非你真的使用它,否则你不会在调试器中看到任何像显示启用这样的属性。

至于你的第二个问题:我现在不能用Selenium 3和最新的ChromeDriver重新创建它,但这可能是bug。