2

次の id 要素でセレンの getAttribute("style") メソッドを使用しています:-

<div id="ntsDiv_1" style="width: 250px; text-align: left; white-space: normal; top: 1090px; left: 131px; visibility: hidden;" class="mlt-pop-container">

しかし、API は値の半分しか返していません。戻っwidth: 250px; text-align: left; white-space: normal;てきて、スタイルの残りの部分が切り取られています。

可視性の値を抽出しようとしていますが、メソッドはスタイルの完全な値を返しません。したがって、可視性の正しい値を判断できません。

私は実行しましたSystem.out.println("Style is:- "+super.getElement(NEXTAG_STORES_DIV).getAttribute("style"));

NEXTAG_STORES_DIVはid要素のxpathに対応し、xpathで要素をsuper.getElement抽出する

私を助けてください!!

4

1 に答える 1

4

Selenium 2.30.0でこれを試しましたが、正常に動作し、属性全体が返されます。

次のことを試してください(すべての例では、テストする必要があると想定しelementていWebElementます)。

  1. 属性の一部のみが返されることを本当に確認してください。コンソールに印刷するだけではありませんか?多くのコンソールでは、行の長さが制限されています。長い行を表示するようにコンソールを設定してみてください。戻り値の長さをプログラムで確認するか、評価してみてください

    element.getAttribute("style").contains("visibility")
    
  2. 可能であれば、Seleniumライブラリをアップグレードしてみてください。属性の取得に関連するバグは認識していませんが、現在(バージョン2.30.0で)解決されているバグがあった可能性があります。

  3. 別のブラウザ/OS/アーキテクチャで試してみてください。それがどこかで機能する場合は、それが特定のブラウザ/ドライバ/ OS /アーキテクチャなどの問題であることがわかり、焦点を絞って修正するか、バグを報告できる可能性があります。

  4. 要素が表示されているかどうかを単に知りたい場合は、正しく、一般的に推奨される方法は、

    element.isDisplayed()
    

    このメソッドは、実際に表示されているかどうかを判断するために検査する必要がある可能性のあるすべてのルールを処理します。

  5. 値がページ上で動的に変化する場合style(つまり、ページのソースコードに静的に記述されていない場合)、WebDriver動的な変化を検出しないため、実際には表示されません。JavaScriptを介して値にアクセスしてみてください。

    if (!driver instanceof JavascriptExecutor) {
        throw new IllegalStateException("JavaScript not enabled for this driver!");
    }
    JavascriptExecutor js = (JavascriptExecutor)driver;
    String styleAttribute = (String)js.executeScript("return arguments[0].style", element);
    
  6. visibilityブラウザーで実際に使用されているCSS属性の計算値を取得する必要があり、属性の属性ではstyleない場合(存在しないか、何らかの方法でオーバーライドされている場合)、JavaScriptのgetComputedStyle()メソッドを使用する必要があります。1つの方法(quirksmode.orgのこの記事で説明されています)は次のとおりです。

    var elem = arguments[0];
    if (elem.currentStyle) {
        var vis = elem.currentStyle['visibility'];
    } else {
        var vis = document.defaultView.getComputedStyle(elem, null).getPropertyValue('visibility');
    }
    return vis;
    

    繰り返しますが、これはを介して呼び出す必要があります

    String visibility = (String)js.executeScript(here_goes_the_whole_script, element);
    
于 2013-02-26T15:42:22.333 に答える