2016-04-04 8 views
3

チェックボックスやテキストの入力値を設定するのは簡単です。しかし、分度器を使ってカラータイプで入力するように値を設定するにはどうすればよいですか?私はこれを行うことを試みた:カラー入力と分度器のやりとり

element(by.id("prop_border-color")).click(); 
browser.driver.actions() 
    .sendKeys(protractor.Key.BACK_SPACE) 
    .sendKeys(protractor.Key.BACK_SPACE) 
    .sendKeys("00") 
    .sendKeys(protractor.Key.ENTER) 
    .perform(); 

を、それは、このエラーをトリガ:

Failed: : Failed to read the 'sessionStorage' property from 'Window': Storage is disabled inside 'data:' URLs.

は何とかカラーピッカーウィンドウと対話することが可能ですか?

UPD:

完全なテスト:

describe('Panel Editor app', function() { 

    function addToplevel() { 
     var elem = element(by.css(".widget-list-item-toplevel")); 
     var target = element(by.id('droparea')); 
     browser.driver.actions() 
      .mouseDown(elem) 
      .mouseMove(target) 
      .mouseUp(target) 
      .perform(); 
    } 

    function addToToplevel(selector) { 
     var elem = element(by.css(selector)); 
     var target = element(by.css('.toplevel')); 
     browser.driver.actions() 
      .mouseDown(elem) 
      .mouseMove(target) 
      .mouseUp(target) 
      .perform(); 
    } 

    beforeEach(function() { 
     browser.get('http://localhost:8080/webapps/panel_editor/index.html'); 
    }); 

    afterEach(function() { 
     browser.executeScript('window.sessionStorage.clear();'); 
     browser.executeScript('window.localStorage.clear();'); 
    }); 


    it('should check all widgets in toplevel', function() { 
     addToplevel(); 

     addToToplevel(".widget-list-item-rows"); 
     browser.sleep(300); 
     element(by.model("dialogCtrl.dialogs.widget.widget_model.props[q].value")).clear().sendKeys(4); 
     element(by.id("widget_modal")).element(by.buttonText("OK")).click(); 
     browser.sleep(300); 

     element.all(by.css(".builder-rows > div")).then(function(rows) { 
      for (var i = 0, l = rows.length-1; i < l; i++) { 
       rows[i].getCssValue("border-color").then(function(val) { 
        expect(val == "rgb(221, 221, 221)").toBe(true); 
       }) 
      } 
     }); 
     element(by.id("prop_border-color")).click(); 
     // Color picker shows. 
     browser.driver.actions() 
      .sendKeys(protractor.Key.BACK_SPACE) 
      .sendKeys(protractor.Key.BACK_SPACE) 
      .sendKeys("00") 
      .sendKeys(protractor.Key.ENTER) 
      .perform(); 
     // ERROR HERE 

     element.all(by.css(".builder-rows > div")).then(function(rows) { 
      for (var i = 0, l = rows.length-1; i < l; i++) { 
       rows[i].getCssValue("border-color").then(function(val) { 
        expect(val == "rgb(221, 221, 0)").toBe(true); 
       }) 
      } 
     }); 
    }); 
}); 

UPD2:

Iを一時的executeScript法を使用して、JSから直接値を設定することによって、この問題を解決:

browser.executeScript("$('#prop_border-color').val('#FF0000'); $('#prop_border-color').change();"); 

でも解決策はまだありません

+0

完全なテストを表示できますか?これはテスト中の角型アプリですか?ありがとう。 – alecxe

+0

はい、角度があります。テストからいくつかのコードを追加しました。私はそれが助けることができる場合は完全なテストを表示することができますが、エラーは間違いなくこの部分にあります。 – Anton

+0

私はこの問題をexecuteScriptメソッドを使用して一時的に解決しました。しかし、より良い解決策を探しています。 – Anton

答えて

1

私はバックスペースがカラー入力に送られないと思っていますが、代わりにブラウザの履歴に戻って空白ページとローカルストレージアクセスエラーが発生する可能性があります。代わりに

、入力フィールドをクリアして、キーを送信するためにclear()を使用して、明示的にclick約束を解決:

var colorInput = element(by.id("prop_border-color")); 
colorInput.click().then(function() { 
    colorInput.clear(); 
    colorInput.sendKeys("#FF0000"); 
}); 

しようとする別のアプローチは、actions()を呼び出すときbrowserbrowser.driverを置き換えることであろう。

+0

ちょうどこれを試みました。このエラーは最初に発生します:**失敗:無効な要素状態:要素を消去するには、ユーザーが編集可能でなければなりません。** * browser.actions *はbrowser.driver.actionsと同じ結果を返します。 – Anton

+0

@Anton okay、couldカラーピッカーのHTML表現を表示しますか?ありがとう。 – alecxe

関連する問題