C#Webdriver FindsBy - 将FindsBy语句与页面对象框架类中ID变量中的类似文本相结合

时间:2015-09-03 01:49:11

标签: c# selenium-webdriver pageobjects

我改编了一个在C#中创建的页面对象框架,它使用Selenium PageObjects Library来查找页面元素。

在我的程序中,我有一个带有FindsBy语句的Class,它找到一个ID为#34; ngp_total_records"的文本字段。 (见下文)

[FindsBy(How = How.Id, Using = "ngp_total_records")]
public IWebElement txtNGPTotalRecords { get; set; }

我还有一段代码可以找到类似的文本字段但id不同(见下文)

[FindsBy(How = How.Id, Using = "ngp_usi_total_records")]
public IWebElement txtNGPUSITotalRecords { get; set; }

问题:有没有办法将上面的FindsBy语句合并为一个,以便" ngp_total_records" id和" ngp_usi_total_records"每次执行程序时都会找到id?

1 个答案:

答案 0 :(得分:0)

行。我想我明白你在问什么。如果使用产品类型1,则元素1可见。如果使用产品类型2,则元素2可见。是?希望?在这种情况下,我会这样做......

由于ID不同,您仍然需要这两个元素。我会将两个“finder”元素设为私有,然后使用一个公共元素来表示可用于给定产品的元素。在页面的构造函数中,您将检查哪个元素存在并将其分配给公共元素

[FindsBy(How = How.Id, Using = "ngp_total_records")]
private IWebElement txtNGPTotalRecords { get; set; }

[FindsBy(How = How.Id, Using = "ngp_usi_total_records")]
private IWebElement txtNGPUSITotalRecords { get; set; }

// no FindsBy here... this gets set in its getter
public IWebElement txtTotalRecords;

txtTotalRecords的getter中,将其设置为存在的任何元素。我认为你可能遇到的一个问题是当一个元素不存在时,PageFactory会发生什么?它会抛出还是继续前进?我不知道,因为我不使用PageFactory。

编辑1:基于JimEvans更正的更新答案。