如何使用其中定义的范围单击找到的链接?

时间:2017-10-20 00:20:32

标签: java html5 selenium xpath element

我发誓我已经搜索了谷歌和搜索引擎优化几个小时,我无法找到适用于我案件的任何内容。

我找到了我的链接:

WebElement element = driver.findElement(By.linkText("News"));

然而,这不会返回链接(< a>标记),但会返回a< span>使用linkText。

以下是链接结构的样子:

<a href="________" itemprop="url" style="height: 88px; line-height: 88px;">
    <span class="avia-bullet"></span>
    <span class="avia-menu-text">News</span>
    <span class="avia-menu-fx">
        <span class="avia-arrow-wrap">
            <span class="avia-arrow"></span>
        </span>
    </span>
    <span class="dropdown_available"></span>
</a>

所以,当我这样做:element.click();时,整个浏览器会以&#34; ElementNotInteractableException&#34;结束。我认为这可能会超时,但我已经给了它很多时间但它仍然失败了。
我怀疑我无法点击&lt; span&gt;。

但我如何引用他的父母(&lt; a&gt;)?

我试过了:

element=element.findElement(By.xpath("parent"));
element=element.findElement(By.xpath(".."));

3 个答案:

答案 0 :(得分:0)

对于复杂的HTML,Selenium的默认方法无法按预期工作。

如何尝试使用不同的xpath函数方法:

例如,尝试以下方法:

driver.findElement(By.xpath("//a[contains(.,'News')]")).click();

此SO帖子详细介绍了其他路径功能:XPath contains(text(),'some string') doesn't work when used with node with more than one Text subnode

答案 1 :(得分:0)

您无法对span标记执行任何操作。因此最好获取任何div / link标记,以便您可以对其执行操作。

//span[.='News']/ancestor::a
//span[contains(.,'s')]/ancestor::a

<!-- Any of its innerHTML Text (with out case-sensitive)-->
//a[contains(.,'YY')]

<!-- Next followed child nodes. -->
//a[span[text()='News']]
//a[span='News' and @style="height: 88px; line-height: 88px;"]

<!-- Any of its child - child nodes. -->
//a[.//span[text()='SS']]


//a[[.='News'] and [.//span[contains(.,'YY')]]]
//a[span='News' and [.//span[contains(.,'YYY')]] ]

Test XML

<a href="________" itemprop="url" style="height: 8px; line-height: 88px;">
    <span class="avia-menu-text">News</span>
    <span class="avia-menu-fx">
        <span class="avia-arrow-wrap">SS
            <span class="avia-arrow">YYY</span>
        </span>
    </span>
</a>

答案 2 :(得分:0)

在描述时写下xpath:

你需要:

  

使用其中定义的范围的链接?

所以这里是xpath:

//a[.//span]

并使跨度更具体:

//a[.//span[text()='News']]

//a[.//span[contains(@class,'avia-menu-text')][text()='News']]

您还可以向a元素或其父项添加一些规范,以确保找到正确的项目。