web-dev-qa-db-ja.com

要素にIDまたは名前がない場合、ロボットフレームワークでClick Element関数を使用するにはどうすればよいですか?

現在、Selenium2Libraryをロボットフレームワークで使用して、いくつかのWebテストを自動化しています。現在、Click Element関数を使用してログインボタンのクリックを自動化することに問題があります。

これは私が使用したい要素です:

<a class="transparentBtn loginLink ng-scope" ng-click="commonService.gigyaRaasLogin()" translate="BTN_ADMIN_LOGIN_WATCHLIST">LOGIN</a>

コンソールからコピーした場合、これはxpathです://*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a

この要素をクリックしたい場合に使用するロケーターを見つけるのに苦労します。

これらは私がこれまでに試したことのいくつかです:

  1. Click Element css=a.loginLink
  2. Click Element link=LOGIN
4
Zubair

一意のCSS(1つの一致するノード)を見つけるか、これを試してください

Wait Until Element Is Visible   xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a      10
Click Element    xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a
3
Sachhya

もう少し柔軟にすることをお勧めします。柔軟な定義と独自の定義のバランスが取れている場合の良いアプローチ。そうしないと、最小のサイト変更でテストが失敗します。

次の例は、前の例と一致する必要があります。

  • LOGINテキストを含むリンクに一致

    Click Element       //a[contains(text(),'LOGIN')]
    
  • LOGINテキストを含む任意の要素に一致

    Click Element       //*[contains(text(),'LOGIN')]
    
  • クラス属性が「transparentBtn loginLink ng-scope」と等しい任意の要素に一致

    Click Element       //a[@class="transparentBtn loginLink ng-scope"]
    
  • 複数の属性を同時に確認できます

    Click Element       //a[@class='transparentBtn loginLink ng-scope' and @ng-click='commonService.gigyaRaasLogin()']
    
  • Contains()を使用して、クラス属性の文字列部分かどうかを確認できます

    Click Element       //a[contains(@class,'loginLink')]
    
4
Krisz

タイトルの質問に答えるために、Selenium2Libraryは多くの異なるロケーターをサポートしています。最も表現力のあるものはxpathで、ほぼすべてを検索するために使用できます。 Selenium2Libraryのドキュメント の要素の検索または指定のセクションを参照してください。

あなたの場合、リンクをクリックすると、click link link=LOGINは動作するはずです。そうでない場合は、リンクがiframe内にあるか、おそらくCSSによって非表示になっている可能性があります(angularのような一部のフレームワークでは、要素が非表示になり、独自のものに置き換えられます)

0
Bryan Oakley