替换java脚本中具有classname属性的所有子节点

时间:2016-03-17 19:58:07

标签: javascript selenium webdriver

我正在为我的项目使用Selenium Webdriver。我有一个网页,其中有多个菜单项,而这些菜单项又有子菜单项。我想用nav-left-main div标签替换所有子元素的classname属性"" (空格)以便所有元素在主页面中可见以进行单击(而不是导航到每个菜单 - >子菜单) 基本上我想在id = main下找到classname的所有元素,并用''替换它们。我如何使用selenium webdriver中的JavaScriptExecutor做到这一点?

<div id="nav-left-main">
<div>
<a class="left-nav-icons icomoon-icon-users3 " title="Users" href="#Users-tab">
<div id="Users-sub" class="nav-left-subnav">
    <div id="Users-tab" class="hidden-menu">
      <ul class="level3menu">
       <li>
          <i class="cm-icon18 iconfont-arrow-sans-right" style="margin-top:-2px;margin-left:-17px;"></i>
          <a>Users</a>
          <ul class="second-level-hidden-menu" style="margin-left:5px;margin- top:10px;">
          <ul class="second-level-hidden-menu" style="margin-left:5px;margin-top:10px;">
          <ul class="second-level-hidden-menu" style="margin-left:5px;margin-top:10px;">
       </li>
   </ul>
<ul>
      <li>
        <a id="AdminGroups" class="$item.className" title="" href="cms?action=groupList&pageTitle=Groups">Groups</a>
      </li>
</ul>
<ul>
</div>
</div>
</div>

2 个答案:

答案 0 :(得分:0)

我假设您正在尝试编写一些自动化测试。请考虑这一点:如果您修改UI内容,您可能会影响页面上其他内容的行为(例如,某些JS假设这些类属性值可能会停止运行)。

或者,注入CSS(通过STYLE或LINK)来改变这些元素的外观和可见性(提示:!important)。然而,理论上,即使这样也不是理想的解决方案,因为像JS一样(例如)出于同样的原因可能会出现香蕉。

我没有测试网页的经验,但是Selenium不能自动化人类用户的行为吗?换句话说,也许最好的方法是编写测试代码来激活菜单,就像人类用户一样(鼠标悬停等)。

答案 1 :(得分:0)

这可能对您有用:

var main_div = document.getElementById("nav-left-main");
var all_childs = main_div.getElementsByTagName("*");    // get all child elements
for (var i=0; i<all_childs.length; i++) 
    {
    if ( all_childs[i].hasAttribute("class") ) all_childs[i].className = ""; // or all_childs[i].removeAttribute("class")
    }