我改编了一个在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?
答案 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更正的更新答案。