Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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# 通过xpathC查找Web驱动程序_C#_Xpath_Hyperlink_Webdriver - Fatal编程技术网

C# 通过xpathC查找Web驱动程序

C# 通过xpathC查找Web驱动程序,c#,xpath,hyperlink,webdriver,C#,Xpath,Hyperlink,Webdriver,我需要用C在webdriver中创建一个测试,我在其中单击一个链接,该链接具有如下结构的菜单中的文本: <ul style="overflow: hidden"> <li> <ul class"menu" style="overflow: hidden"> <li class="class_li"> <a href="/level1/leve2">

我需要用C在webdriver中创建一个测试,我在其中单击一个链接,该链接具有如下结构的菜单中的文本:

<ul style="overflow: hidden">
    <li>
        <ul class"menu" style="overflow: hidden">
            <li class="class_li">
                <a href="/level1/leve2">
                    <span class="class_span">Text</span>
                </a>
            </li>
        </ul>

    </li>
    <li />
    <li />
</ul>
IWebElement element = driver.FindElement(By.XPath("//a[span/text()='text_from_upper_node']"));
Actions action = new Actions(driver);
action.MoveToElement(element).Build().Perform();
driver.FindElement(By.XPath("//a[span/text()='text_from_link_I_want_to_click']")).Click();
class_li和class_span被多次使用。我不能修改html代码


我尝试了几个不同的xpath语句,但每次我得到InvalidSelectorException都没有得到处理。如何访问我的链接并单击它?

下面的xpath选择第一个链接,该链接具有文本的直接子范围

我不是硒专家,但你应该能够做到:

driver.FindElement(By.XPath("(//a[span/text()='Text'])[1]")).Click();

好的,我成功了。我使用了基于StuartLC answer的操作和XPath,它看起来像这样:

<ul style="overflow: hidden">
    <li>
        <ul class"menu" style="overflow: hidden">
            <li class="class_li">
                <a href="/level1/leve2">
                    <span class="class_span">Text</span>
                </a>
            </li>
        </ul>

    </li>
    <li />
    <li />
</ul>
IWebElement element = driver.FindElement(By.XPath("//a[span/text()='text_from_upper_node']"));
Actions action = new Actions(driver);
action.MoveToElement(element).Build().Perform();
driver.FindElement(By.XPath("//a[span/text()='text_from_link_I_want_to_click']")).Click();

谢谢你的帮助。干杯

如果您想使用多棵树,您可以尝试这样的方法

        IList<IWebElement> webElements = WebDriver.FindElements(By.ClassName("class_span"));

网页中的文本是否始终可见,或者您是否必须单击某个链接才能访问它?我需要悬停菜单,然后它从侧面滑动,接下来我需要悬停菜单位置,然后带链接的子菜单滑出。请添加更多HTML片段,从主菜单开始,到要单击的子菜单中的项目,或者到目前为止您所处理的代码段,以采用相同的技巧。此外,如果您可以提供菜单外观的快照,这也会很有帮助