ControlList中多个PaymentItem的FindByXPath均返回首个元素值问题
问题原因
你代码里FindByXPath使用的XPath表达式开头的//是绝对路径查询语法,含义是从整个HTML文档的根节点出发查找所有匹配的后代节点,不会受到当前PaymentItem对应的父div节点的上下文限制。所以两个PaymentItem实例查询SpecialInstructions时,都会返回全文档第一个匹配的元素,自然都取到第一个节点的"None"值。
修复方案
把所有控件对应的XPath开头的//替换为.//,.代表当前上下文节点(即每个PaymentItem匹配到的div节点),这样查询就会限制在当前PaymentItem的节点范围内执行,属于相对路径查询。
修改后的代码如下:
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; } }
内容的提问来源于stack exchange,提问作者Steve Gray
相关产品推荐
相关产品推荐

