2017-10-20 95 views
0

我发誓我已经搜索谷歌和SE几个小时,我只是找不到任何适用于我的情况。如何点击使用其中定义的跨度找到的链接?

我一直使用位于我的链接:

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

然而,这不返回的链接(<一>标签),但返回一个< 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();,整个浏览器与“ElementNotInteractableException”下降。我认为这可能会超时,但我给了它很多时间,但仍然失败。
我怀疑我只是不能点击< span>。

但我该如何参考他的父母(< a>)?

我想:

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

try element = element.findElement(By.xpath(“./ ..”)); ”。/'在xpath中表示当前节点。你需要使用./来告诉硒从当前节点找父节点:新闻 yong

回答

0

对于复杂的HTML,如预期硒的默认方法是行不通的。

如何使用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

+0

嗯,这不会工作,因为它不是'A',它包含test = News,它是一个'Span'... – DraxDomax

+0

我如何去你找到你的答案的元素的父母? – DraxDomax

+0

用“。”替换“text()”。 - 现在试试。 – parishodak

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> 
0

写的XPath你描述它:

你需要:

正在使用中它定义的范围有关系吗?

所以这里的XPath:

//a[.//span] 

,并让跨度更具体:

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

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

您还可以添加一些规范a元素,或这是父母的项目,以确保你fou找到正确的项目。