C# 需要基于同级查找XPath表达式
我在div标记中重复了这段代码,并希望编写一个XPath表达式来查找dsd链接,以便根据h4标记中的文本单击它。更改HTML不是一个选项C# 需要基于同级查找XPath表达式,c#,selenium,xpath,C#,Selenium,Xpath,我在div标记中重复了这段代码,并希望编写一个XPath表达式来查找dsd链接,以便根据h4标记中的文本单击它。更改HTML不是一个选项 <div> <h4>Test Block</h4> <br/> <div> <a href="/dsd/<generic unpredicatable text>">Option 1</a> <a hre
<div>
<h4>Test Block</h4>
<br/>
<div>
<a href="/dsd/<generic unpredicatable text>">Option 1</a>
<a href="otherlink/<generic unpredicatable text>">Option 2</a>
</div>
</div>
但我没法让它工作。任何建议都将不胜感激。您可以使用
//div[h4[contains(,'Test Block')]//a[contains(@href,'dsd')]
。类似于//div[h4[contains(,'Test Block')]]//a[contains(,'Option 1')]
的东西应该可以工作。我认为您的XPath没有问题。由于占位符的原因,您提供的HTML无效,但您的XPath似乎可以使用以下内容:
void Main()
{
var xml = @"
<div>
<h4>Test Block</h4>
<br/>
<div>
<a href=""/dsd/generic unpredicatable text"">Option 1</a>
<a href=""otherlink/generic unpredicatable text"">Option 2</a>
</div>
</div>";
var xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
var node = xmldoc.DocumentElement.SelectSingleNode("//div/h4[contains(text(),'Test Block')]");
node = node.SelectSingleNode("../div/a[contains(@href,'dsd')]");
Console.WriteLine(node.InnerText);
}
void Main()
{
var xml=@”
试块
";
var xmldoc=新的XmlDocument();
LoadXml(xml);
var node=xmldoc.DocumentElement.SelectSingleNode(“//div/h4[contains(text(),'Test Block')]”);
node=node.SelectSingleNode(../div/a[contains(@href,'dsd')]);
Console.WriteLine(node.InnerText);
}
我没有一台工作的机器,所以我不能测试这个,但是你说任何反馈都会收到,所以,我非常确定使用XPath可以从一个孩子那里获取单个元素。如果您确信此HTML将始终保持不变,则可以执行以下操作:
../div[0] //(First element of the child)
你为什么不使用下面的兄弟姐妹呢
任何时候你说它不起作用,请具体说明你得到了什么结果(以及你期望的结果)。您展示的XPath表达式看起来大致正确。findSubmitButton的值是多少?submitButton?这些不太可能起作用,因为在给出的示例HTML中,
元素不是
元素的后代。@LarsH Thax。更正。
../div[0] //(First element of the child)
var findSubmitButton = Driver.FindElement(By.XPath("//div/h4[contains(text(), '" + name + "')]"));
var submitButton = findSubmitButton.FindElement(By.XPath("following-sibling::div/a[contains(@href,'dsd')]"));