c# Webdriver FindsBy -在页面对象框架类的ID变量中组合FindsBy语句和相似的文本

本文关键字:FindsBy ID 变量 组合 文本 相似 语句 Webdriver 面对 框架 对象 | 更新日期: 2023-09-27 18:11:00

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

在我的程序中,我有一个带有FindsBy语句的类,该语句查找ID为"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 ?

c# Webdriver FindsBy -在页面对象框架类的ID变量中组合FindsBy语句和相似的文本

OK。我想我明白你的意思了。如果使用产品类型1,则元素1是可见的。如果使用产品类型2,则元素2是可见的。是吗?希望吗?在这种情况下,我将这样做…

仍然需要这两个元素,因为它们的id是不同的。我将两个"查找器"元素设为私有,然后使用一个公共元素表示给定产品可用的元素。在页面的构造函数中,您将检查存在哪个元素并将其赋值给公共元素

[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的更正更新答案