InvalidSelectorError,需要帮助定义我的xpath选择器

时间:2017-05-16 18:40:31

标签: javascript html selenium dom xpath

我正看着一棵巨大的dom树。使用NodeJS / Selenium,我特别需要在标签中找到标题,我需要点击关联的href。我对正则表达式很新,而且我已经收到很多错误。

到目前为止,这是我最好的尝试:

By.xpath(//ul/class='slds-grid'//a[title="${uniqueStringToMatch}"]).click()

获取

  

InvalidSelectorError:无效的选择器:无法找到带有xpath的元素   表达式// ul / class =' slds-grid slds-grid - pull-padded slds-wrap   list' // a [text()=" Load Client Referrals"]因为以下原因   错误:SyntaxError:无法执行'评估' on' Document':Type   评估表达式时转换失败。

下面的树遗漏了上面的所有层次结构,因为我认为它不重要,但如果我错了,请纠正我。从树中的第一个唯一className ...

    <ul class='slds-grid'>
        <li class='slds-col'>
            <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch"
                <span class="label-ctr">
            </a>
        </li>
        <li class='slds-col'>
            <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch"
                <span class="label-ctr">
            </a>
        </li>
        <li class='slds-col'>
            <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch"
                <span class="label-ctr">
            </a>
        </li>
    </ul>

li中的所有标题都是唯一的。

我正在使用W3学校学习,但这里没时间了。

(我也在寻找自己编写xpath的最快方式 - 工具或教程非常感谢!)

3 个答案:

答案 0 :(得分:1)

我现在无法测试它,但我通常使用@语法来匹配XPath中的属性。这样的事情对你有用吗?

Download Manager

我也发现很难找到简单XPath的初级教程,最后通过反复试验学到了很多东西。还有Chrome和Firefox的扩展,它为网页中的元素生成XPath字符串,我从中学到了很多东西。

答案 1 :(得分:1)

你可能比阅读W3C XPath 1.0规范要糟糕得多:与后来的规格相比,它的内容简短且可读性

https://www.w3.org/TR/xpath/

当然,与尝试通过反复试验或复制粘贴示例进行学习相比,您将节省大量时间。虽然每个人都有自己的学习方式。

但是当我看到像

这样的东西时
//ul/class='slds-grid'//a[title="${uniqueStringToMatch}"]

我只是想知道你在想什么:你显然没有掌握路径和步骤的核心概念。

XPath中有两个基本操作。

  • A / B表示找到A选择的东西,然后从那里开始,然后找到B选择的东西。

  • A [P]表示查找A选择的内容,然后删除那些与条件P不匹配的内容。

你的class='slds-grid'显然是一个过滤条件,并且(因为类和标题是属性而不是元素)所以它应该是

//ul[@class='slds-grid']//a[@title="${uniqueStringToMatch}"]

顺便说一下,XPath几乎与正则表达式无关。

答案 2 :(得分:0)

// UL [@class =&#34;的SLD栅&#34;] //一个[@title =&#34; uniqueStringToMatch&#34;]