使用PageFactory

时间:2015-09-25 09:38:10

标签: c# .net selenium selenium-webdriver automated-tests

当我像这样声明我的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
}

我看到的只有: - Non-Public membershttp://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 个答案:

答案 0 :(得分:0)

关于第一个问题:您在调试器中看到的实际上只是一个代理对象PageFactory使用代理初始化您的_buyNowButton,只有在脚本中的某个位置使用代理才能解析代理。因此,除非您实际使用它,否则您将不会在调试器中看到任何属性,例如DisplayedEnabled

关于你的第二个问题:我现在无法使用Selenium 3和最新的ChromeDriver重新创建它,但它可能是当天的一个错误。