確認したいドロップダウンがあるとします。まともな方法(私が間違っている場合は私を修正する)は、値を期待値のJSON配列(文字列)と比較することです。ドロップダウンの値から分度器でjson文字列を作成する方法
<select>
<option value="--">Pick a State</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
...
</select>
「値」属性とテキスト値を、特に配列から取得する方法を最終的に考え出しました。 (。javascriptの男初めのため容易ではない偉業)
とにかく、私はそれを働いてきた:
var actual = [];
$$('select option').each(function(el) {
var name = '';
var abbrev = '';
el.getText().then(function(s) {
name = s;
});
el.getAttribute('value').then(function (val) {
console.log("val = {"+val+"}");
abbrev = val;
});
console.log("abbrev = {"+abbrev+"}");
arr.push({ "name": name, "abbreviation": abbrev
});
結果は、あなたは非常に精通している人...よくそれらを期待することとして出てきます。
abbrev = {}
abbrev = {}
abbrev = {}
val = {--}
val = {AL}
val = {AK}
そしてactual
次のようになります見ることができるように
[
{ name: '', abbreviation: '' },
{ name: '', abbreviation: '' },
{ name: '', abbreviation: '' }
]
その包含ブロックの実行が完了した後、.then
方法が起こります。
私の質問、私は結果を得ることができるように、どのように私はそれを修正行くのですされています
[
{ "name": "Pick your State", "abbreviation": "--" },
{ "name": "Alabama", "abbreviation": "AL" },
{ "name": "Alaska", "abbreviation": "AK" }
]
注:将来的にこの質問時に発生する可能性があり、他人のために : $$('')
は速記であります(私が知る限り)element.all(by.css(''))
と同等です。そして$('')
がelement(by.css(''))
UPDATEの省略形です:私はそれがほとんど考え出し持っ
。私は呼び出しを行うときに
var actual = [];
ddOption.each(function(el) {
actual.push({
"name": el.getText().then(function(s) { return s; }),
"abbreviation": el.getAttribute('value').then(function(s) { return s; })
});
});
ので、このようなactual[2].name
ように私はお返しにAlaska
を取得し、actual[2].abbreviation
は私にAK
を与えます。私は、文字列
actual[2].abbreviation + ' = ' + actual[2].name
にそれを置くしようとした場合 はしかし、私は、文字列として有望情報を取得します。実際の[2] .name.valueOf()を試してみるときも同じです。
ManagedPromise::1372 {[[PromiseStatus]]: "fulfilled"} = ManagedPromise::1363 {[[PromiseStatus]]: "fulfilled"}
返された約束を文字列として変換するにはどうすればよいですか?
LIVE例:
一つは、私が何をしようとしているの実際の例を生成することができます。elementExplorerで
- スタート分度器:
protractor --elementExplorer
- 無効同期(私たちがしようとしているページはiframe内の角度アプリを持っている):IFRAMEに
browser.driver.get('http://www.w3schools.com/angular/tryit.asp?filename=try_ng_select')
- スイッチ:
browser.ignoreSynchronization = true;
- ページを取得します。 :
browser.switchTo().frame('iframeResult')
- ddOptionを設定します。
var ddOption = $$('select option')
- (elementExplorerは複数行のコンマnds ...少なくとも私が知ることのできる方法ではない)、我々は
actual
をリセットしてから、魔法を実行します(上記の1行のブレークダウンはアップデートの上に示されています)。var actual = []; ddOption.each(function(el) { actual.push({ "name": el.getText().then(function(s) { return s; }), "abbreviation": el.getAttribute('value').then(function(s) { return s; }) }); });
actual[1].name
と入力してEmil
を出力すると、- タイプ
actual[1].name + ' = ' + actual[1].abbreviation
となり、次のように出力されます。ManagedPromise::929 {[[PromiseStatus]]: "fulfilled"} = ManagedPromise::938 {[[PromiseStatus]]: "fulfilled"}
私はEmil = string:Emil
ありがとう:
完全なコードは次のようになります。私は '.when'を試したときにTypeErrorを取得しました。私はおそらく間違った場所でそれを使用しました。それがそうであるように、私は本当に近いです。私の質問の更新を参照してください。 – Machtyn
あなたが購読している約束の結果を得るには、すでに完了していればすぐにコールバックが呼び出されます。このシナリオでも、結果を出力する前にあなたの約束をマージする必要があります。それは型エラーを与えているとき?多分私はあなたがそれを修正するのを助けることができますか? – 42shadow42
私は、質問に実際のサンプルの説明を追加しました。時間を費やしてくれてありがとう。 – Machtyn