html - proper way to use selenium locator on a navigation bar -


i've been spending lot of time learning selenium on own, have selected website "actitime.com" practice have learnt , started automating scripts came across issue has left me stumped 2 days. thought place ask since guys expert on field.

it navigation menu content in html grid.my query, is approach appropriate use locator extract names of menus on navigation bar

i'm trying extract names of navigation bar time-track, task,reports,user(which modules of webapplication)

my code:

public class test50_misc extends browser{   public static void main(string[] args) throws filenotfoundexception {      call_chrome();<-system property     webdriver driver =new chromedriver();     driver.manage().timeouts().implicitlywait(20, timeunit.seconds);      driver.get("https://online.actitime.com/adbc/login.do");     driver.findelement(by.xpath(".//*[@id='username']")).sendkeys("xxxxx");     driver.findelement(by.xpath(".//*[@name='pwd']")).sendkeys("xxxxx");     driver.findelement(by.xpath(".//*[@id='loginbutton']")).click();     stringbuilder sb=new stringbuilder();      webelement e=driver.findelement(     by.xpath(".//table[@class ='navtable']//tr[1]"));//reducing scope of driver particular area       list<webelement>all_links=e.findelements(by.xpath("//div[contains(@class,'label')]"));     for(webelement element:all_links){         sb.append(element.getattribute("innerhtml")).append(" : ");//how use string builder      }     system.out.println(sb);  } 

}

expected output:- time-track : tasks : reports : users :

actual output time-track : tasks : reports : users : settings   : add-ons   :   : tips : select customer or project :

which not i'm interested in since including items of sub table (help,tips..)

html dom structure

<div class="navbg withsubmenu"> <table class="navtable" cellpadding="0" cellspacing="0" id="topnav" style="cursor: default;">     <tbody><tr>         <td class="logocell navcell" valign="top">             <div style="position: relative">                 <div><img src="/adbc/img/ferngreen/pixel.gif?hash=993496393" height="1" width="190"></div>                      <div style="padding:19px 0 0 28px"><img src="/adbc/img/ferngreen/top_nav/default-logo.png?hash=993496393" height="44" width="145"></div>              </div>         </td>                    <td class="navitem navcell relative selected">                  <a class="content selected tt">                 <div class="label">time-track</div>                 <div class="img">&nbsp;</div>             </a>                                      </td>              <td class="navitem navcell relative notselected">              <a href="/adbc/tasks/otasklist.do" class="content tasks"><div class="label" style="z-index:155; ">tasks</div>//<----label                 <div class="img">&nbsp;</div></a>                 </td>                         <td class="navitem navcell relative notselected">                  <a href="/adbc/reports/reports.do" class="content reports"><div class="label" style="z-index:155; ">reports</div>                 <div class="img">&nbsp;</div></a>          </td>              <td class="navitem navcell relative notselected">                            <a href="/adbc/administration/userlist.do" class="content users"><div class="label" style="z-index:155; ">users</div>                 <div class="img">&nbsp;</div></a>                                  </td>                         <td class="menucell navcell" valign="top">             <table cellpadding="0" cellspacing="0">                 <tbody><tr>                     <td valign="top">                      </td>                     <td valign="top">                         <div class="menucelldiv">                             <table class="menutablewrap" cellpadding="0" cellspacing="0" border="0">                                 <tbody><tr class="logoutcontainer">                                     <td class="profilecell">                                         <a class="userprofilelink username" href="javascript:void(0)" onclick="onuserprofilelinkclicked(); return false;">                                             adda                                              london                                         </a>                                      </td>                                     <td class="logoutseparator">&nbsp;|&nbsp;</td>                                     <td class="logoutcell">                                         <a href="/adbc/logout.do" id="logoutlink" class="logout">logout</a>                                     </td>                                 </tr>                                 <tr>                                     <td colspan="3">                                         <div class="menutable">                                              <div class="topmenubutton">       <div class="popup_menu_container">     <div class="popup_menu_button popup_menu_button_settings" onclick="popupmenu.show(event, $('#popup_menu_settings'));">         <div class="popup_menu_icon settings_icon">          </div>         <div class="popup_menu_label">             settings             <div class="popup_menu_arrow">&nbsp;</div>         </div>     </div>      <div id="popup_menu_settings" class="popup_menu_body">         <div class="popup_beak"></div>         <div class="popup_menu_content popup_menu_settings">             <div class="popup_menu_ul">                 <div class="popup_menu_title">                     settings                 </div>                 <ul id="popup_menu_items_content" class="popup_menu_items">                     <li class="popup_menu_separator"></li>                      <li class="popup_menu_item" id="popup_menu_item_1"><a href="/adbc/administration/features.do" class="item_link"><div class="item_title">turn features on / off</div>                         <div class="item_descr">review features , decide need</div></a></li>                      <li class="popup_menu_separator"></li>                      <li class="popup_menu_item" id="popup_menu_item_6">                         <a href="/adbc/administration/settings.do?noreload=false" class="item_link"><div class="item_title">                                  general settings                             </div>                             <div class="item_descr">manage system settings &amp; configure actitime</div></a>                     </li>                      <li class="popup_menu_separator"></li>                                                 <li class="popup_menu_item" id="popup_menu_item_2" style=" "><a href="/adbc/administration/btlist.do" class="item_link">types of work</a></li>                                                                        <li class="popup_menu_item" id="popup_menu_item_3" style=" "><a href="/adbc/administration/ltlist.do" class="item_link">leave ypes</a></li>                                             <li class="popup_menu_item" id="popup_menu_item_4"><a href="/adbc/administration/workingdays.do" class="item_link">work schedule</a> 

li>

                    <li class="popup_menu_item" id="popup_menu_item_5"><a href="/adbc/administration/notifications.do" class="item_link">notifications</a></li>                                                 <li class="popup_menu_separator"></li>                         <li class="popup_menu_item" id="popup_menu_item_7"><a href="/adbc/administration/customization.do" class="item_link">logo &amp; color scheme</a></li>                         <li class="popup_menu_item" id="popup_menu_item_8"><a href="/adbc/administration/manage_licenses.do" class="item_link">licenses</a></li>                 </ul>             </div>         </div>     </div> </div>                                             </div>                                                                                             <div class="topmenubutton">                                   <div class="popup_menu_container">     <div class="popup_menu_button popup_menu_button_addons" onclick="popupmenu.show(event, $('#popup_menu_addons'));">         <div class="popup_menu_icon addons_icon"></div>         <div class="popup_menu_label">             add-ons             <div class="popup_menu_arrow">&nbsp;</div>         </div>     </div>      <div id="popup_menu_addons" class="popup_menu_body">         <div class="popup_beak"></div>         <div class="popup_menu_content popup_menu_addons">             <div class="popup_menu_ul">                 <div class="popup_menu_title">                     add-ons                  </div>                 <ul class="popup_menu_items">                     <li class="popup_menu_separator"></li>                     <li class="popup_menu_item"><a class="item_link has_icon mobile_icon" href="https://www.actitime.com/actitime-mobile-app.html" target="_blank">                         <div class="item_title">actitime mobile app</div>                         <div class="item_descr">free mobile application iphone &amp; android</div>                     </a></li>                     <li class="popup_menu_separator"></li>                     <li class="popup_menu_item"><a class="item_link has_icon qb_icon" href="https://www.actitime.com/timesheet-quickbooks-integration.html" target="_blank">                         <div class="item_title">integration quickbooks</div>                         <div class="item_descr">import working , leave time quickbooks</div>                     </a></li>                     <li class="popup_menu_separator"></li>                     <li class="popup_menu_item">                              <a class="item_link has_icon actiplans_icon" href="javascript:void(0)" onclick="openatintegrationpopup(); return false;">                                  <div class="item_title">integration actiplans</div>                                 <div class="item_descr" style="white-space: pre-wrap;">interactive schedule planning leaves , checking collegues' presence @ work</div>                             </a>                     </li>                 </ul>             </div>         </div>     </div> </div>                                             </div>                                             <div class="topmenubutton">  <div class="popup_menu_container">     <div class="popup_menu_button popup_menu_button_support" onclick="openhelpandsupportmenu(event)">         <div class="popup_menu_icon support_icon"></div>         <div class="popup_menu_label">                         <div class="popup_menu_arrow">&nbsp;</div>         </div>     </div>      <div id="popup_menu_support" class="popup_menu_body popup_menu_support_container">         <div class="popup_beak"></div>         <div class="popup_menu_content popup_menu_support demodataloaded inviteuserspossible">              <div id="demodatacontainer" class="demodatacontainer">                 <div class="demodatascrollcontainer">                     <div class="firsttextblock">                         <span class="demodataloadedtitle">demo data loaded</span>                         <div class="demodataloadednote">                             save time product review we've preloaded sample data (users, tasks, etc.).<br><br>                             can remove these data anytime when ready start working product.                         </div>                     </div>                     <div id="cleandemodatabutton" class="cleandemodatabutton">clean demo data</div>                     <div class="removedemodatatext">preloaded demo data removed actitime. data created (settings, customers, projects, tasks, users, etc.) kept in system.</div>                     <div id="proceedcleandemodatabutton" class="proceedcleandemodatabutton">proceed clean up</div>                     <div id="canceldemodataclenup" class="canceldemodataclenup">cancel</div>                 </div>             </div>               <div id="inviteuserfromhelppopup" class="inviteuserfromhelppopup">                 <div class="scrollinvitecontainer">                     <div class="inviteteampicture"><img src="/adbc/img/ferngreen/support/team-pic-demo.png?hash=993496393"></div>                     <div id="popup_menu_support_createaccountcolleague" class="createaccountcolleague">create account colleague</div>                     <div class="inviteinputfieldscontainer">                         <div style="width: 250px">                             <input id="popup_menu_support_firstnameinvitemenu" maxlength="32" class="firstnameinvitemenu inputfieldwithplaceholder" type="text" placeholder="first name"><!-- comment needed remove space between inputs                                    --><input id="popup_menu_support_lastnameinvitemenu" maxlength="32" class="lastnameinvitemenu inputfieldwithplaceholder " type="text" placeholder="last name">                         </div>                         <input id="popup_menu_support_emailinvitemenu" class="emailinvitemenu inputfieldwithplaceholder" type="text" placeholder="email">                         <div>                             <div id="popup_menu_support_sendinvitationbutton" class="sendinvitationbutton">send invitation</div>                             <div id="popup_menu_support_cancelinvitationbutton" class="cancelinvitationbutton">cancel</div>                         </div>                     </div>                 </div>                 <div class="sendinvitationcontainer">                     <div class="mailimagebg">                         <div class="mailimage"></div>                     </div>                     <div class="textsandbuttons">                         <div id="popup_menu_support_invitedtext" class="invitedtext"></div>                         <div id="popup_menu_support_errorinvitetext" class="errorinvitetext"></div>                         <div id="popup_menu_support_inviteanotherpersonbutton" class="inviteanotherpersonbutton">invite person</div>                         <div id="popup_menu_support_closeinvitebutton" class="closebutton">close</div>                     </div>                 </div>             </div>             <div id="popup_menu_support_invitecolleagueserrortooltip" class="yellowtooltip tooltiptext" style="display: none;">                 <div id="popup_menu_support_invitecolleagueserrortooltiptextplaceholder"></div>             </div>               <div class="popup_menu_ul">                 <div class="popup_menu_title">                     &amp; support                 </div>                 <ul class="popup_menu_items">                     <li class="popup_menu_separator"></li>                      <li class="popup_menu_item"><a class="item_link" href="javascript:void(0);" onclick="menuhandler.openintrovideo('kjoobh5s84w'); return false;" style="position: relative">                         introduction video                         <div class="icon_intro"></div>                     </a></li>                      <li class="popup_menu_separator"></li>                      <li class="popup_menu_item"><a class="item_link" href="javascript:void(0);" onclick="menuhandler.openuserguide(); return false;">user guide</a></li>                      <li class="popup_menu_item"><a class="item_link" href="javascript:void(0);" onclick="menuhandler.openfaq(); return false;">frequently asked questions</a></li>                      <li class="popup_menu_item"><a class="item_link" href="javascript:void(0);" onclick="menuhandler.openabout(); return false;">about actitime</a></li>                     <li class="popup_menu_separator"></li>                     <li class="popup_menu_item"><a class="item_link" href="javascript:void(0);" onclick="menuhandler.reportabug();">contact actitime support</a></li>                 </ul>             </div>      <div id="requestcallphonecontainer_support" class="requestcallphone">     <div class="phoneinputblock">         <div class="requestphonetext">need more info? request call:</div>         <div class="inputphonecontainer">             <div id="countrycodeplaceholder_support" class="countrycodeselector"></div>             <input maxlength="32" type="text" class="inputfieldwithplaceholder phoneinput phoneplaceholder" id="phoneinput_support" placeholder="phone number">             <div id="sendphonebutton_support" class="sendphonebutton">send</div>         </div>         <div class="erroranswer" style="display: none">             server not responding.             <div class="pleasetryagainbutton">please try again</div>         </div>     </div>     <div class="phonesendblock" style="display: none">         <div class="backgroundimage">             <div class="mailimage"></div>         </div>     </div>     <div class="phonewassendblock" style="display: none">         <div class="thanktext">thanks, received request!</div>         <div class="contactwithusertext">we contact possible.</div>         <div id="closephonewassendbutton_support" class="closebutton">close</div>     </div> </div>          </div>     </div> </div>                                               </div>                                              <div class="topmenubutton">                                                 <!--tips menu button placeholder-->                                                 <div class="popup_menu_container">                                                     <div class="popup_menu_button popup_menu_button_tips" onclick="pageoverlaytipsmanager.getinstance().toggle()">                                                         <div class="popup_menu_icon tips_icon_light_on"></div>                                                         <div class="popup_menu_label">                                                             tips                                                         </div>                                                     </div>                                                 </div>                                             </div>                                         </div>                                     </td>                                 </tr>                             </tbody></table>                         </div>                     </td>                 </tr>             </tbody></table>         </td>     </tr>       <tr class="secondlevelrow">               <td class="secondlevelcell" colspan="1">&nbsp;</td>               <td class="secondlevelcell selectedcolnum1  " colspan="6">               <div class="secondlevelnavigationitem selected ">                      <a class="item active">enter time-track</a>              </div>               <div class="secondlevelnavigationitem  ">                      <a href="/adbc/user/view_tt.do" class="item">view time-track</a>              </div>               <div class="secondlevelnavigationitem  ">                      <a href="/adbc/user/lock_tt.do" class="item">lock time-track</a>              </div>               <div class="secondlevelnavigationitem  ">                      <a href="/adbc/administration/approve_tt.do" class="item">approve time-track</a> 

summary:-

  • please correct me if approach of implementing locator not appropriate , how can extract tables of particular area without extracting elements of lower sub-tables*

    i apologize if not summarize in few sentences.i wish stack overflow had attachments have made life easier

list<webelement>all_links=driver.findelements(by.xpath("//table[@class ='navtable']//tr[1]//a[contains(@class,'content')]/div[contains(@class,'label')]")); 

try xpath, can remove first xpath search in code. hoping 'reports' has same structure in xpath, not included in html have posted.

another thing - code not correct list<webelement>all_links=e.findelements(by.xpath("//div[contains(@class,'label')]")); search within element need prefix xpath dot '.', otherwise whole document searched instead of using element context.


Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -