包含 2 个项目 returns 第一个项目的 ControlList 两个项目的文本元素
ControlList which contains 2 items returns first items Text element for both items
我有以下代码:
public ControlList<PaymentItem, _> PaymentGroup { get; private set; }
[ControlDefinition("div[@id='grant-details']//div", ContainingClass = "payment-details", ComponentTypeName = "Payment Item")]
public class PaymentItem : Control<_>
{
[FindByXPath("//a[contains(@class, 'test-payment-details-toggle')]")]
public Link<_> Caret { get; private set; }
[FindByXPath("//strong[text() = 'Special Instructions:']/parent::p")]
public Text<_> SpecialInstructions { get; private set; }
}
当我运行时,源代码中的HTML有2个div匹配PaymentItem,其中第一个有SpecialInstructions Text对象和一个字符串“None”的值,而第二个有一些随机文本,但 PaymentGroup[0].SpecialInstructions 和 PaymentGroup[1].SpecialInstructions 都 return “None”的值 - 看起来从文档根目录执行 FindByXPath,而不是使用匹配的 class //div - 我做错了什么?
问题是 [FindByXPath("//strong[text() = 'Special Instructions:']/parent::p")]
中的 XPath 不正确。将开头的 //
替换为 .//
,或者直接将其删除(.//
将默认添加到后台)。
//
- 从 HTML 文档的根部查找元素。
.//
- 在父 Atata 组件的元素内找到一个元素。
此外,我会将[FindByXPath("//a[contains(@class, 'test-payment-details-toggle')]")]
简化为[FindByClass("test-payment-details-toggle")]
。 Link<TOwner>
在它的控件定义中引用了 <a>
,所以你只需要添加一个 class 选择器。
我有以下代码:
public ControlList<PaymentItem, _> PaymentGroup { get; private set; }
[ControlDefinition("div[@id='grant-details']//div", ContainingClass = "payment-details", ComponentTypeName = "Payment Item")]
public class PaymentItem : Control<_>
{
[FindByXPath("//a[contains(@class, 'test-payment-details-toggle')]")]
public Link<_> Caret { get; private set; }
[FindByXPath("//strong[text() = 'Special Instructions:']/parent::p")]
public Text<_> SpecialInstructions { get; private set; }
}
当我运行时,源代码中的HTML有2个div匹配PaymentItem,其中第一个有SpecialInstructions Text对象和一个字符串“None”的值,而第二个有一些随机文本,但 PaymentGroup[0].SpecialInstructions 和 PaymentGroup[1].SpecialInstructions 都 return “None”的值 - 看起来从文档根目录执行 FindByXPath,而不是使用匹配的 class //div - 我做错了什么?
问题是 [FindByXPath("//strong[text() = 'Special Instructions:']/parent::p")]
中的 XPath 不正确。将开头的 //
替换为 .//
,或者直接将其删除(.//
将默认添加到后台)。
//
- 从 HTML 文档的根部查找元素。.//
- 在父 Atata 组件的元素内找到一个元素。
此外,我会将[FindByXPath("//a[contains(@class, 'test-payment-details-toggle')]")]
简化为[FindByClass("test-payment-details-toggle")]
。 Link<TOwner>
在它的控件定义中引用了 <a>
,所以你只需要添加一个 class 选择器。