2017-06-05 53 views
2

我一直在嘗試在量角器中運行此代碼,但我不斷收到此錯誤,我也無法找到一種方法來獲取anpr_box_input文本值無論如何。量角器元素文本值sendKeys和屬性錯誤

值:ManagedPromise :: 871 {[PromiseStatus]: 「待定」} 失敗 - 當屏幕包含作爲ANPR請求 應該有一個有效的許可證號牌套房失敗:ANPR屏幕內容

Chrome版本:58.0.3029.110(64-bit) 相關性: 「量角器」:「5.1.2」, 「jasmine-core」:「〜2.4.1」, 「karma-jasmine」:「^ 1.1.0」 , 「karma-jasmine-html-reporter」:「^ 0.2.2」, 「@ types/jasmine」:「2.5.36」

d escribe('ANPR Screen Content',function(){

it('should have a valid license number plate when screen contains as ANPR request', function() { 

    var base_keyboard_ok = browser.driver.findElement(by.id('base-keyboard-ok')); 

    var anpr_box_input = browser.driver.findElement(by.className('anpr-box-input')); 
    //anpr_box_input.clear().then(function() { anpr_box_input.sendKeys('999'); }); tryed it before, didn't work 
    anpr_box_input.clear().then(function() { anpr_box_input.setAttribute("value", "459"); }); 

    base_keyboard_ok.click(); 

    /* didn't work  
    anpr_box_input.getText().then(function(text) { 
     console.log("AQUI: " + text); 
    }); 
    */ 

    //console.log("Value: " + anpr_box_input.getAttribute('value')); didn't work 

    //working on.. 
    anpr_box_input.getAttribute('value').then(function(text) { 
     console.log("Value: " + text); 
    }); 

    //so i'll need something like 
    expect(anpr_box_input.text).toEqual("1234"); 
}); 

});基於所提供的信息

+0

爲HTML的部分來就像它: –

+0

+0

任何幫助將不勝感激。 –

回答

1

和HTML,因爲它不是一個input你不能設置元素的值與

anpr_box_input.sendKeys('999');,這是一個<div>

anpr_box_input.setAttribute("value", "459");也不起作用,因爲setAttribute不是有效的量角器命令。您首先需要知道該字段是如何工作的,我的猜測是這是一個<div>元素,該元素反映了包含原始值的其他字段的值。你需要找到現場,並做了:

  • sendKeys()
  • browser.driver.executeScript('argument[0].setAttribute("name", "value")', element(by.css('#selector').getWebElement())

我對你的代碼也有1條評論。根據您提供的代碼,它看起來像您有一個Angular頁面,但您使用「vanila」webdriver命令來查找元素,爲什麼不使用element(by.css(''))等等的量角器語法?

0

非常感謝wswebcreation,我就對你剛纔提到有關webdriver的,但我剛剛找到了解決辦法,正如vanila什麼樣子如下:

it('should have a valid license number plate when screen contains as ANPR request', function() { 
    var buttonKey; 

    buttonKey = browser.driver.findElement(by.id('button_A')); 
    buttonKey.click(); 

    browser.sleep(SLEEP_TIMER); 

    buttonKey = browser.driver.findElement(by.id('button_B')); 
    buttonKey.click(); 

    var base_keyboard_ok = browser.driver.findElement(by.id('base-keyboard-ok')); 
    base_keyboard_ok.click(); 

    var anpr_box_input = browser.driver.findElement(by.className('anpr-box-input')); 
    anpr_box_input.getAttribute('innerHTML').then(function(anpr) { 
     console.log("Plate: " + anpr); 
     expect(globalE2EFunctions.validateAnpr(anpr)).toBe(true); 
    }); 

}); 

module.exports = { 

    //Still need to implement regex plates validation according to each country patterns 
    validateAnpr: function(anpr) { 
    if(anpr != 'CANCEL' && anpr != 'DEL' && anpr != 'OK'){ 
     return true; 
    } else{ 
     return false; 
    } 
    } 

};