2014-03-13 59 views
0

我在eclipse/TestNG中使用java webdriver。在webdriver中查找動態元素

我在網頁上有一個名爲'測試142'的元素。 142總是在變化,這是記錄的計數。我使用了partialLinkText技術,但失敗了,因爲頁面上有另一個名爲'Tests'的元素,所以每次執行測試腳本時,光標都會點擊第二個元素。請幫助我構建「測試142」的動態元素定位器,它可以解決我的問題。

HTML代碼:

html> 
<head> 
<body> 
<div id="errorMsgContainer" class="ui-widget-header"> </div> 
<script type="text/javascript"> 
<style> 
    <div id="help" class="help"> 
    <div class="wrapper"> 
    <div id="header"> 
    <div id="mainMenu"> 
    <br clear="all"> 
    <div class="siteWrapper"> 
    <div id="content"> 
    <div id="main" class="main"> 
    <h2> 
    <ul id="" class="tabPane" style="padding-left:5px;"> 
    <div class="tabPage"> 
    <ul id="" class="tabPaneVertical" style="padding-left:5px;"> 
    <li id="items_" class=""> 
    <li id="items_" class=""> 
    <li id="items_" class="active"> 
    <div> 
    <a href="/test2/1/p/a/projects/project/tests/project_id/1"> 
    Tests 
    <span>142</span> 
    </a> 
    <div class="children"> 
    </div> 
    </li> 
    <li id="items_" class=""> 
    <li id="items_" class=""> 
    <li id="items_" class=""> 
    <li id="items_" class=""> 
    <li id="items_" class=""> 
    <li id="items_" class="last"> 
    </ul> 
    <div class="tabPageVertical"> 
    <script type="text/javascript"> 
    </div> 
    </div> 
    <div id="footer"></div> 
    <div class="clear"></div> 
    </div> 
    <div class="footer">Powered by 2 © 2006-2013 v1.4.9.3</div> 
    </div> 
    <script> 
    </div> 
    <div id="ui-datepicker-div" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div> 
    </body> 
    </html> 

感謝。

+0

這裏發佈的HTML似乎很畸形...還有更多''

' tags than there are '
標籤,在''標記沒有匹配'',等等。你可以簡化成最小的頁面,這表明你的問題? – Tetrinity

回答

0

首先,正如我在評論中提到的那樣,現在的HTML格式非常糟糕,所以任何直接的答案在修復後都可能不正確。相反,我會在我們尋找元素時討論實際發生的事情,因爲我認爲那裏存在一些混淆。

澄清一些術語:示例HTML中沒有名爲「測試142」的元素。有一個元素包含文本「測試142」,但這是完全不同的東西。我們現在真正需要的是<a>標籤,如果我們只是在實際的一些感興趣環繞着這座文本(當我們檢索文本的<span>將被忽略),或<span>標籤..

例如,XPath //li[@id='items_']/div/a指向li,其中id='items_'包含一個包含超鏈接的div,在此情況下(在清理HTML之後)是包含「測試142」的元素。這不依賴於鏈接內的實際文本;如果它說「測試804」或「jabberwocky」,那麼XPath仍然會匹配它。如果您只對數字感興趣,則可以使用XPath //li[@id='items_']/div/a/span查看<span>標籤。

重降低測試HTML:

<html> 
<body> 
<div class="tabPage"> 
    <ul id="" class="tabPaneVertical" style="padding-left:5px;"> 
     <li id="items_" class="active"> 
      <div> 
       <a href="/test2/1/p/a/projects/project/tests/project_id/1"> 
        Tests <span>142</span> 
       </a> 
      </div> 
     </li> 
    </ul> 
</div> 
</body> 
</html> 
+0

很好的幫助!我創建了driver.findElement(By.xpath(「// li [@ id ='items _'] [3]/div/a」))。click();它的工作。 – user3241182

+0

非常好,很高興我能幫到你!如果你覺得答案很好,一定要接受它(點擊空白的複選標記);這向其他用戶顯示該答案有助於解決您的問題。 – Tetrinity

相關問題