2016-04-26 8 views
1

In meinem Winkelmesser Framework, möchte ich das gefundene Element in der Benutzeroberfläche hervorheben. Ich versuchte mit unten Code und es funktioniert gut, wenn ich locators(id,name,className,linkText,xpath) verwende. Wenn ich locators (buttonText,repeater,model,binding) unter Code verwende funktioniert nicht und werfen " Ungültige Locator" Fehler.So markieren Sie Element in Winkelmesser zur Laufzeit

Statt "browser.driver.findElement(locator);" dies, wenn ich "element(locator);" Code nicht funktioniert und werfen

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

Node-Version --- 2.15.1

Protractor Version --- 3.2.2

Wie kann ich die Funktion nenne: -

highlightElement(by.linkText('log In')); --- adaequat

highlightElement(by.buttonText('Place order')); - Fehler

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); 
        }); 


       }; 

Werfen Sie mir bitte helfen, gibt es eine andere Art und Weise das Element in Winkelmesser zu markieren.

Grüße,

Deepak Kumar Susarla

Antwort

2

Sie sind ganz in der Nähe. Alle diese Locators, die Ihre Funktion funktioniert für sind direkt von WebDriver geerbt. Diese Liste enthält - className, css, id, linkTest, js, name, partialLinkText, tagName, and xpath;

Die anderen, die nicht funktionieren sind Protactors prototypische Vererbung. Diese Liste enthält - addLocator, binding, exactBinding, model, buttonText, partialButtonText, repeater, exactRepeater, cssContainingText, options, and deepCss.

In ähnlicher Weise - der Anruf in Ihrer Funktion findElement ist von WebDriver geerbt. So rufen Sie im Wesentlichen findElement(by.buttonText()), die nicht unterstützt wird (Winkelmesser element(by.buttonText()) würde funktionieren).

Soweit Code, geändert ich ein paar Dinge, und es scheint für mich zu arbeiten:

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); 
    }); 
}; 

Note den el.locator(), el.getWebElement() und stattdessen Deklarieren Sie das Element innerhalb der Funktion var ele = browser.driver.findElement(locator); können Sie einfach übergeben Sie das Element als Argument. Um einen Verweis zu geben, hier ist mein Beispielcode:

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'); 
    }); 
}); 

Quelle: https://angular.github.io/protractor/#/api

+0

Thank q sehr viel. Es funktioniert super .. !! –

+0

@DeepakKumarSusarla kein Problem! Wenn es Ihr Problem gelöst hat, denken Sie bitte daran, meine Antwort zu akzeptieren! – Gunderson

Verwandte Themen