2016-04-26 16 views
1

私の分度器のフレームワークで、見つかった要素をUIで強調したいと思います。 以下のコードで試してみましたが、locators(id,name,className,linkText,xpath)を使用するとうまくいきます。 locators (buttonText,repeater,model,binding)以下のコードを使用しているときに、「 無効なロケータ」というエラーが発生しています。代わりの実行時に分度器の要素を強調表示する方法

"browser.driver.findElement(locator);" この私が "element(locator);" のコードが動作して

"FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory"

ノードバージョン--- 2.15.1

分度器のバージョンを---投げされていない使用している場合は3.2.2

私は、関数を呼び出していますどのように: - 作業

highlightElement(by.linkText('log In')); ---罰金

highlightElement(by.buttonText('Place order')); - 私を助けてくださいエラー

highlightElement = function(locator){ 
        console.log("highlight--"); 

        console.log("locator---:"+locator); 
        var ele = browser.driver.findElement(locator); 

        return browser.driver.executeScript("arguments[0].setAttribute('style', arguments[1]);",ele, "color: Red; border: 2px solid red;"). 
         then(function(resp){ 
         browser.sleep(2000); 
         return ele; 
        },function(err){ 
         console.log("error is :"+err); 
        }); 


       }; 

を投げることは分度器の要素を強調するために他の方法があります。

よろしく、

ディーパック・クマールSusarla

答えて

2

あなたは非常に近いです。あなたの機能が働いているすべてのロケータは、webDriverから直接継承されます。このリストには、 - className, css, id, linkTest, js, name, partialLinkText, tagName, and xpathが含まれます。

その他は機能しませんは、分度器のプロトタイプの継承です。このリストには、 - addLocator, binding, exactBinding, model, buttonText, partialButtonText, repeater, exactRepeater, cssContainingText, options, and deepCssが含まれます。

同様に、関数findElementの呼び出しはwebDriverから継承されます。したがって、サポートされていないfindElement(by.buttonText())を本質的に呼び出しています(分度器のelement(by.buttonText())が機能します)。

限り、あなたのコードのように、私はいくつかのことを変更し、私のために働くようだ:

highlightElement = function(el){ 
    console.log("highlight--"); 

    console.log("locator---:"+el.locator()); 

    return browser.driver.executeScript("arguments[0].setAttribute('style', arguments[1]);",el.getWebElement(), "color: Red; border: 2px solid red;"). 
    then(function(resp){ 
    browser.sleep(2000); 
    return el; 
    },function(err){ 
    console.log("error is :"+err); 
    }); 
}; 

ノートel.locator()el.getWebElement()を、代わりにvar ele = browser.driver.findElement(locator);の中で要素を宣言するには、要素を引数として渡すだけです。

describe('Protractor Demo App', function() { 
    it('changes the color', function() { 
    browser.get('http://juliemr.github.io/protractor-demo/'); 
    var ely = element(by.model('first')); // using model 
    highlightElement(ely); // works with model 
    browser.sleep(5000); // just to see the header change color 
    expect(ely.getAttribute('style')).toContain('color: red'); 
    }); 
}); 

ソース:非常にhttps://angular.github.io/protractor/#/api

+0

感謝Qリファレンスを与えるために、ここに私のコード例です。その素晴らしい仕事.. .. –

+0

@DeepakKumarSusarla問題ありません!あなたの問題を解決したら、私の答えを受け入れることを検討してください! – Gunderson

関連する問題