在webdriver中查找动态元素

时间:2014-03-13 10:17:01

标签: java javascript selenium

我正在使用带有eclipse / TestNG的java webdriver。

我有一个名为' Tests 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>

感谢。

1 个答案:

答案 0 :(得分:0)

首先,正如我在评论中提到的,HTML现在严重格式错误,因此任何直接答案在修复后都可能不正确。相反,当我们寻找一个元素时,我会谈谈实际发生的事情,因为我觉得那里有一些混乱。

澄清一些术语:示例HTML中没有名为“Tests 142”的元素。有一个元素包含文本“测试142”,但这是完全不同的东西。我们真正需要的是此文本周围的<a>标记(我们检索文本时会忽略<span>),如果我们只感兴趣,则<span>标记会被忽略在实际数字..

例如,XPath //li[@id='items_']/div/a指向liid='items_'包含div,其中包含超链接,在这种情况下(在清理HTML之后)有点)是包含“测试142”的元素。这不取决于链接中的实际文本;如果它说“测试804”或“jabberwocky”,XPath仍然会匹配它。如果您只对该号码感兴趣,则可以使用XPath <span>查看//li[@id='items_']/div/a/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>