2014-03-13 58 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

相关问题