我发誓我已经搜索了谷歌和搜索引擎优化几个小时,我无法找到适用于我案件的任何内容。
我找到了我的链接:
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(".."));
答案 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')]] ]
<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
元素或其父项添加一些规范,以确保找到正确的项目。