当我像这样声明我的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
关于你的第一个问题:你在调试器中看到的实际上只是一个代理对象。PageFactory
用代理初始化你的_buyNowButton
,只有当你在脚本中的某个地方使用它时,它才会被解析。所以除非你真的使用它,否则你不会在调试器中看到任何像显示
或启用
这样的属性。
至于你的第二个问题:我现在不能用Selenium 3和最新的ChromeDriver重新创建它,但这可能是bug。