2016-04-26 4 views
1

В моем транспортир рамки, я хотел бы выделить найденный элемент в пользовательском интерфейсе. Я пробовал с кодом ниже, и он работает нормально, если я использую 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"

версии Node --- 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

Спасибо кв очень много. Его работа потрясающая .. !! –

+0

@DeepakKumarSusarla без проблем! если он решит вашу проблему, пожалуйста, подумайте о принятии моего ответа! – Gunderson