2013-02-11 80 views
1

我的XPath是:
無法找到動態的XPath

// * [@ ID = 'form_MenuBar:j_id24']/SPAN

和值#24的變化。

// * [@ ID = 'form_MenuBar:j_id48']/SPAN

我試過,但沒有作品。

driver.findElement(By.xpath(「// a [contains(@ id,'form_MenuBar:j_id $')]/span」));

源XML:

<li class="ui-menuitem ui-widget ui-corner-all ui-menuitem-active" role="menuitem"> 
    <a id="form_MenuBar:j_id24" class="ui-menuitem-link ui-corner-all ui-state-hover" href="/Demand/j_spring_security_logout"> 
    <span class="ui-menuitem-text">Log off</span> 
    </a> 
</li> 
+0

你可以發佈你正在尋找的元素的HTML嗎?另外,你是否嘗試過使用'form_MenuBar:j_id'?使用xpath時某些符號會導致問題。 – Nashibukasan 2013-02-11 04:52:49

回答

2

試試看

driver.findElement(By.xpath("//a[contains(@id,'form_MenuBar:j_id')]/span")); 

如果您正在使用XPath中包含沒有必要使用'$'

+0

它沒有工作。我的代碼片段是

  • Log off
  • Riy1234 2013-02-11 05:45:12

    +0

    @ Riy1234,他的解決方案適用於我。它是否在iFrame中?您正在使用的確切XPath是什麼?什麼瀏覽器?什麼版本的Selenium? – Arran 2013-02-11 09:51:24

    +0

    否它不符合框架。 Xpath是log_out = // * [@ id ='form_MenuBar:j_id24']/span,Firefox 15和selenium java版本= 2.28 – Riy1234 2013-02-11 10:18:55

    0

    看來你使用的是java,所以我會盡量根據它來回答它。我不是一名Java開發人員,所以如果語法不正確,我表示歉意。

    如果一切正在發生變化的是ID中的數字,你知道的ID,你可以這樣做:

    driver.findElement(By.id(String.format("form_MenuBar:j_id%d", the_id)); 
    

    而且,我不知道你的應用程序,您正在測試,但如果有多個元素具有以「form_MenuBar:j_id」開頭的id,那麼findElement將只會找到第一個,這可能不是您嘗試查找的鏈接。

    你可以使用findElements,它將返回匹配的所有元素的列表,然後迭代這些元素直到找到你真正想要的元素。