2017-10-20 138 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找到正確的項目。