2017-05-16 10 views
0

ウェブページのすべてのウェブリンクを配列に入れようとしています&ウェブページのURLリンクの位置がテキストと一致するリンクをクリックしたいのですが未修理。 以下のコードはエラーで失敗します:リンクを取得してクリックできません - 投機機

失敗:インデックスが範囲外です。インデックスにある要素にアクセスしようと:15、私はJavascriptのresult_links.lengthプロパティを使用しようとしたが、奇妙な、私は

var result_links =element.all(by.css('.entity.element.a')); 
    for (var i=0;i<22;i++){ 
     result_links.get(i).getText().then(function(text){ 
     console.log("The fetched links are "+text); 
     if (text==="Xtreme Testing -explorers 12345"){ 
      result_links.get(i).click(); 
     }  
     }) 
    } 

(CSSセレクタ、.entity.element.a)でロケータと一致のみ0要素があります

The fetched links are Stick urls 
The fetched links are Budgets 27167678 
The fetched links are www.xyztyi.com 
The fetched links are YT its yours 
The fetched links are wwww.thytghj.com 
The fetched links are Engage stick 
The fetched links are Methods 156788.com 
The fetched links are Stithgyuji 287878 
The fetched links are Hello 679u 
The fetched links are Johns 766788 
The fetched links are www.gtyyuuhjhj 
The fetched links are yuyuuyukuku 
The fetched links are Stanfods 777686y88 
The fetched links are www.xyz.com 
The fetched links are Xtreme Testing -explorers 12345 
:私は私が探していますWebリンクは、常に以下のコードの出力がある

0-22の間になるように静的に数22を代入しなければならなかった理由thatsのように、その中の配列番号を得ることはありません

答えて

-1

もしその示唆するように、あなたがlinktextやpartiallinktextを使用することができる上に、配列のアプローチのために行くことはない必須、それは動作するはずです。 また、indexOfメソッドを試してみることもできます。

var result_links =element.all(by.css('.entity.element.a')); 
    for (var i=0;i<22;i++){ 
     result_links.get(i).getText().then(function(text){ 
     console.log("The fetched links are "+text); 
     var index=text.indexOf("Xtreme Testing -explorers 12345"); 
     result_links.get(index).click();  
     }) 
    } 
+0

上記のコードは動作しません。 'result_links.get(i).getText()'を 'result_links.getText()'に変更する必要があります。 –

0

by.css()の代わりにby.linktext("Xtreme Testing -explorers 12345")のまたはby.partialLinkText("Xtreme Testing -explorers 12345")またはby.cssContainingText(".entity.element.a","Xtreme Testing -explorers 12345")

その他の代替ソリューション:

var result_links =element.all(by.css('.entity.element.a')); 
result_links.getText().then(function(linkList){ 
    var index=text.indexOf("Xtreme Testing -explorers 12345"); 
    result_links.get(index).click(); 
}); 

または

var result_links =element.all(by.css('.entity.element.a')); 
result_links.filter(function(link){ 
    return link.getText().then(function(linkText){ 
     return linkText == "Xtreme Testing -explorers 12345"; 
    }); 
}).first().click(); 
+0

これは役に立ちましたが、私のアプローチでは何が問題でしたか?それはif条件ですか? –

+0

javascriptの非同期動作のために、getText()promise内でforループで使用された変数 'i'を使用することはできません。だから、 'getText()' promiseの変数 'i'の値にアクセスするためにクロージャを実装しなければなりません。 –

関連する問題