【问题标题】:Finding dynamic elements in webdriver在 webdriver 中查找动态元素
【发布时间】:2014-03-13 10:17:00
【问题描述】:

我正在使用 java webdriver 和 eclipse/TestNG。

我在网页上有一个名为“Tests 142”的元素。 142 总是在变化,这是对记录的计数。我使用了 partialLinkText 技术,但它失败了,因为页面上有另一个名为“Tests”的元素,所以每次我执行测试脚本时,光标都会点击第二个元素。请帮我构建“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>

谢谢。

【问题讨论】:

  • 此处发布的 HTML 格式似乎非常错误...&lt;div&gt; 标签比&lt;/div&gt; 标签多得多,&lt;head&gt; 标签没有匹配的&lt;/head&gt;,等等。您能否将其简化为能证明您的问题的最小页面?

标签: java javascript selenium


【解决方案1】:

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

澄清一些术语:示例 HTML 中没有名为“Tests 142”的元素。有一个元素包含文本“Tests 142”,但那是完全不同的东西。我们真正要寻找的是围绕此文本的 &lt;a&gt; 标签(当我们检索文本时,&lt;span&gt; 将被忽略),或者如果我们只对实际数字感兴趣,则为 &lt;span&gt; 标签。

例如,XPath //li[@id='items_']/div/a 指向一个带有id='items_'li,其中包含一个包含超链接的div,在这种情况下(在清理HTML 之后)是包含“测试 142"。这不依赖于链接中的实际文本;如果它显示“Tests 804”或“jabberwocky”,XPath 仍然会匹配它。如果您只对数字感兴趣,则可以使用 XPath //li[@id='items_']/div/a/span 仅查看 &lt;span&gt; 标记。

大大减少了测试 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>

【讨论】:

  • 帮助很大!!!我创建了 driver.findElement(By.xpath("//li[@id='items_'][3]/div/a")).click();它奏效了。
  • 太好了,很高兴我能帮上忙!如果您觉得答案足够好,请务必接受(通过单击空白复选标记);这向其他用户表明该答案有助于解决您的问题。
猜你喜欢
  • 2020-05-18
  • 2012-12-12
  • 2017-09-12
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多