2017-10-12 1 views
0

私は最初の要素をホバーする必要があるhtmlを以下に示します。 同じクラス名の3つの要素があります。固有の識別子はありません。ホバリングでクラスが同じ要素をクリックできません

ここは要素のHTMLコードです。

<a href="javascript:;" class="nav-link nav-toggle"> 
        <i class="icon-briefcase"></i> 
        <span class="title">Tender</span> 
        <span class="arrow open"></span> 
        <span class="selected"></span> 
       </a> 

私は

List<WebElement> MainMenu=driver.findElements(By.xpath("//a[@class='nav-link nav-toggle']"));   
     Actions action = new Actions(driver); 
     action.moveToElement(MainMenu.get(0)).build().perform(); 

をホバーしたいが、4つの要素を持つクラスも同じことをホバリングした後がありますされて最初の要素をクリックコードの下にしようとしています。一意の識別子はありません。

私はコード

List<WebElement> MainMenu1=driver.findElements(By.xpath("//a[@class='nav-link nav-toggle']")); 
Actions action = new Actions(driver); 
      action.moveToElement(MainMenu.get(0)).build().click(); 

ではなく、第二の要素をクリックすることができ下回ってみました。

マイ画面が

second screen after first hover

final click on slighting option

<!DOCTYPE html> 
<html class="ng-scope" data-ng-app="MetronicApp" lang="en"> 
<head> 
<body class="page-header-fixed page-sidebar-closed-hide-logo ng-scope page-content-white page-sidebar-closed" ng-controller="AppController" ng-class="{'page-content-white': settings.layout.pageContentWhite,'page-container-bg-solid': settings.layout.pageBodySolid, 'page-sidebar-closed': settings.layout.pageSidebarClosed}"> 
<div class="page-spinner-bar hide" ng-spinner-bar=""> 
<div class="page-header navbar navbar-fixed-top ng-scope" data-ng-include="'tpl/header.html'" data-ng-controller="HeaderController" style=""> 
<div class="clearfix"> </div> 
<div class="page-container"> 
<div class="page-sidebar-wrapper ng-scope" data-ng-include="'tpl/sidebar.html'" data-ng-controller="SidebarController" style=""> 
<div class="page-sidebar navbar-collapse collapse ng-scope" ng-show="roleId"> 
<ul class="page-sidebar-menu page-sidebar-menu-closed" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" ng-class="{'page-sidebar-menu-closed': settings.layout.pageSidebarClosed}" style=""> 
<li class="nav-item ng-scope" ng-if="roleId != 3 && roleId != 5 && roleId !=7"> 
<a class="nav-link nav-toggle" href="javascript:;"> 
<ul class="sub-menu adj_submenu"> 
</li> 
<li class="nav-item ng-scope" ng-if="roleId == 2 || roleId == 6 || roleId == 1"> 
</ul> 
</div> 
</div> 
<div class="page-content-wrapper" ng-class="(global_user_name != undefined) ? 'page-content-wrapper' : 'page-content'"> 
<a class="page-quick-sidebar-toggler" href="javascript:;"> 
<div class="page-quick-sidebar-wrapper ng-scope" data-ng-include="'tpl/quick-sidebar.html'" data-ng-controller="QuickSidebarController" style=""> 
</div> 
<div class="page-footer ng-scope" data-ng-include="'tpl/footer.html'" data-ng-controller="FooterController" style=""> 
<script src="../assets/global/plugins/jquery.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/jquery.blockui.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/js.cookie.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/angular.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/angular-sanitize.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/angular-touch.min.js" type="text/javascript"> 
<script src="../assets/global/scripts/angular-animate.min.js" type="text/javascript"> 
<script src="../assets/global/scripts/toaster.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/plugins/angular-ui-router.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/plugins/ocLazyLoad.min.js" type="text/javascript"> 
<script src="../assets/global/plugins/angularjs/plugins/ui-bootstrap-tpls.min.js" type="text/javascript"> 
<script src="js/main.js" type="text/javascript"> 
<script src="js/directives.js" type="text/javascript"> 
<script src="../assets/global/scripts/app.min.js" type="text/javascript"> 
<script src="../assets/layouts/layout/scripts/layout.min.js" type="text/javascript"> 
<script src="../assets/layouts/global/scripts/quick-sidebar.min.js" type="text/javascript"> 
<script src="../assets/layouts/global/scripts/quick-nav.min.js" type="text/javascript"> 
<script src="../app/masters/commonServices/commonService.js" type="text/javascript"> 
<script src="../app/lib/ng-file-upload.js" type="text/javascript"> 
<script src="../app/lib/ng-file-upload-shim.js" type="text/javascript"> 
<script src="../app/lib/d3.min.js" type="text/javascript"> 
<script src="../app/lib/nv.d3.min.js" type="text/javascript"> 
<script src="../app/lib/angular-nvd3.min.js" type="text/javascript"> 
<script src="../app/tender/commonTenderController/commonTender.controller.js" type="text/javascript"> 
<div id="toast-container" class="toast-top-right" ng-class="[config.position, config.animation]" toaster-options="{'close-button':false, 'time-out':{ 'toast-warning': 2000, 'toast-error': 0 } }"></div> 
</body> 
</html> 
+0

「入札」メニューの2つの完全なHTMLをキャプチャしてここに入れることはできますか?私の推測では、HTMLの一部が灰色で表示されています。これらのセクションは、ホバーアクションの特定の属性を変更します。独自の要素がない場合、hv 2は 'driver.findElement(By.xpath(" // td [@ class = 'nameCol'とtext()= "" + name + "のようなやや複雑なxpathを書き込みます。 ]/following-sibling :: td/a "))'を実行します。上に乗ってクリックすると、 – user2611581

+0

のようなsmthingでd要素とchnge属性を識別しやすくなります。 'final JavascriptExecutor js =(JavascriptExecutor)driver; id = 'id'の要素の変更された帰属名です。ここで、display = blockは、idが 'id'の要素の変更された帰属名です。js.executeScript( "document.getElementById( 'id')。nextElementSibling.style.display = 'block'クリック可能です。もちろん、javascriptを使用してDOM上の要素を識別する方法は他にもあります。 – user2611581

+0

@ user2611581入札のhtmlを確認してください。 –

答えて

0

以下のように確認し入札を以下のXPathが正しいかどうか一度です。

//span[contains(text(),'Tender')]/ancestor::a[@class='nav-link nav-toggle'] 

「はい」の場合は、RPFがTenderの直系の子であるかどうかをチェックしてください。はい、このXPathはこれら二つのXPath作業した場合

//(span[contains(text(),'Tender')]/ancestor::a[@class='nav-link nav-toggle'])/a 
or 
//a[text()[normalize-space()= 'RPF']]" 

を働く必要がある場合は、あなたの最終的なコードは

Actions action = new Actions(driver); 
WebElement tender = driver.findElement(By.xpath("//span[contains(text(),'Tender')]/ancestor::a[@class='nav-link nav-toggle']")); 
WebElement rpf= driver.findElement(By.xpath("//(span[contains(text(),'Tender')]/ancestor::a[@class='nav-link nav-toggle'])/a")); 
WebElement sighting = driver.findElement(By.xpath("//a[text()[normalize-space()= 'Sighting']]")); 
action.moveToElement(tender).moveToElement(rpf).moveToElement(sighting).click().build().perform(); 

私は2件の要素、すなわち入札及びRFPの上に取得することができるが、私がすることはできませんよだろう最後の1つの目撃を見つける。

+0

いいえ、最初にマウスを置いてから、ホバリングしてクリックする要素をクリックして同じ名前をクリックしてください。あなたの混乱を解消する添付のスクリーンショットを参照してください –

+0

それでは、目撃リストをクリックしたいですか? –

+0

私は照準をクリックします。 –

0
Tender: //span[text()='Tender'] 

RFP: //i[contains(text(),'RFP'] 

Sighting: //i[text()=' Sighting '] 

これらを使用して要素に移動し、視覚をクリックします。

関連する問題