Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要基于同级查找XPath表达式_C#_Selenium_Xpath - Fatal编程技术网

C# 需要基于同级查找XPath表达式

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标记中重复了这段代码,并希望编写一个XPath表达式来查找dsd链接,以便根据h4标记中的文本单击它。更改HTML不是一个选项

<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')]"));