2017-08-16 13 views
0

私は分度器、タイスクリプト、javascriptで新しいです。だから、正確に何が間違っているのか分かりません。分度器のランダムメニューから要素を取得する方法は?

webelementがオブジェクトを返すだけで、リンクをクリックする操作を実行できません。 linkTextを取得するにはどうすればよいですか? id、css、tagnameのような他のフォームを使用しようとしましたが、なんらかの理由でオブジェクトが失われてしまいます。誰かがこの種の問題を抱えていますか?

//html (which is inside a frame) 

<div class="menuLabel" id="menuLabel1"> </div> 
<div class="submenubox" id="submenu1"> </div> 


<div class="menuLabel" id="menuLabel2"> 
    <table> 
    <tbody> 
     <tr> 
     <td> </td> 
     <td class="menuText"> 
      <nobr> 
      <a onmouseover="menuShow(event,'2')" href="javascript:void(null)" class="ml">Example Main Menu</a> 
      </nobr> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</div> 

<div class="submenubox" id="submenu2"> 
    <table border="0" cellpadding="0" cellspacing="0"> 
    <tbody> 
     <tr> 
     <td class="anything"> 
      <table border="0" cellpadding="0" cellspacing="0"> 
      <tbody> 
       <tr> 
       <td> 
        <table border="0" cellpadding="0" cellspacing="0"> 
        <tbody> 
         <tr> </tr> 
         <tr> 
         <td class="secNav"> 
          <a onmouseover="subMenuShow(event, '2', '1')" ; hoverText='Example Sub Menu' target href="trade/new.action">...</a> 
         </td> 
         </tr> 
        </tbody> 
        </table> 
       </td> 
       </tr> 
      </tbody> 
      </table> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</div> 
//Page object file 
export class PageObject { 
public mainMenuLink: WebElement = element(By.linkText('Example Main Menu')); 
public subMenuLink: WebElement = element(By.linkText('Example Sub Menu')); 

async gettingMenu(): Promise<void> { 

//Mouse over the Main Menu, once this actions is done, a table with submenu appears 
await browser.actions().mouseMove(this.mainMenuLink); 

//Clicking on the submenu link 
await browser.actions().mouseMove(this.subMenuLink); 
await browser.actions().click(this.subMenuLink); 

    } 
} 

答えて

1

あなたは.perform()の呼び出しを逃しています。公式からdocs

このドライバを使用して一連のユーザーアクションを作成します。 Webdriver.ActionSequence#performが呼び出されるまで、シーケンスの実行はスケジュールされません。

試してください:あなたが実際にマウスを持つ要素に行く必要はありません

browser.actions().mouseMove(this.subMenuLink).click().perform(); 
+1

回答ありがとうございました。本当に別のステップに進むのに役立ちます。 :) –

+0

@KellyJojiすばらしいニュース!あなたの質問に正しい答えがあると思われる場合は、その答えを受け入れてください。 [This](https://meta.stackexchange.com/a/5235)は、回答を受け入れるためのクイックガイドです。 – Mykola

0

実際に要素にアクセスできます。

また、(固有のクラスを持っているので)クラス別に要素を取得することもできます。

element(by.cssContainingText('.secNav', 'Example Main Menu')).click(); 

または

element(by.css('.secNav')).click(); 

これはそれを行う必要があり、それが動作するかどうか私に知らせてください。

+0

回答ありがとう@appleですが、私は一意のクラスを持っていませんダイナミックメニューの一種(ユーザー権限に従う)。 私は、特定のメインメニューのサブメニューの "リスト"を得ることができますが、1つしか取得できない(クリックする)方法はありますか? –

関連する問題