【问题标题】:Selenium (.Net core 2) FindsBy using a custom initializer without PageFactorySelenium (.Net core 2) FindsBy 使用没有 PageFactory 的自定义初始化程序
【发布时间】:2020-08-14 12:46:48
【问题描述】:

所以我有一个稍微复杂一点的问题。

是否可以将 C# selenium [FindsBy(.....)] 与某种自定义初始化程序一起使用? 我知道 PageFactory 已被删除,无论哪种方式,它都不会像我想要的那样工作,因为我感兴趣的是让初始化程序在使用元素时完成它的工作。

例如:

在页面对象中我有一些定位器

...

[FindsBy(How = How.Class, Using = "class1"))]
private IWebElement someElement { get; set;}

[FindsBy(How = How.Class, Using = "class2", Priority = 0))]
[FindsBy(How = How.XPATH, Using = "some_xpath", Priority = 1))]
private IWebElement someElement2 { get; set;}

...

现在通常使用PageFactory,您将在页面的构造函数中使用初始化程序,但我感兴趣的是初始化这些对象并在使用元素时执行驱动程序查找。

例如:

... 

//In a test or method .....
someElement2.Click() // and have this element initialized and found right here before the click and every time it is used to be re found

...

为此,您至少需要事先初始化或注入驱动程序,因此我不确定如何做到这一点。

现在我知道您可以使用其他方法(例如委托)来实现这一点,但它们不会像这样干净和直观,而且我知道 PageFactory 具有更多功能,例如缓存元素,但我没有对此感兴趣。

【问题讨论】:

  • 我要指出的是,PageFactory 架构实际上在调用使用该属性装饰的成员之前并没有定位元素。使用InitElements 方法没有执行所有元素的查找;它只是设置管道以在访问页面对象类的成员时执行查找。

标签: c# selenium selenium-webdriver .net-core


【解决方案1】:
private IWebElement someElement => WebDriver.FindElements(By.Class("class1").First();

private IWebElement someElement2 => WebDriver.FindElements(By.Class("class12").FirstOrDefault() ?? WebDriver.FindElements(By.XPath("some_xpath")).First();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 2022-06-10
    • 1970-01-01
    • 2011-12-21
    • 2012-05-16
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多