2017-04-19 3 views
0

私はページ上のリンクをクリックしようとしており、最初のものだけを実行しようとしています。同様のコードを持つ4つのコードがありますが、他のコードを見つけることはできません。Rubyを使ってWatirで類似のHTML要素を見つける方法

これは動作するコードの行です:

@browser.div(class:'ms-vb itx').link(:text =>'Rapid Alignment').click 

は、これは動作しません4のいずれかになります。

@browser.div(class:'ms-vb itx').link(:text =>'Design Develop Integrate and Test').click 

はHTML:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div> 

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div> 
+0

それは明確ではありません、あなたはもっと説明できます –

+0

ページに5つのリンクがあります。すべて5つのソースコードが似ています。私は他の4つを同じ方法で呼んでいても、それぞれの1つをクリックしようとしていて、最初のものだけを実行しようとしています。最初のリンクはページ上で 'Rapid Alignment'として表示され、このコードはリンク-browser.div(クラス: 'ms-vb itx')のリンクを検索します(link::text => 'Rapid Alignment')。 。 2番目のリンクは「Design Develop Integrate and Test」と表示されています。このコードは、-browser.div(クラス: 'ms-vb itx')の位置を特定するためには機能しません。積分とテスト ')。クリック – Bhuvana

+0

「うまくいかない」とはどういう意味ですか?静かに失敗する? '要素を見つけることができません 'というエラーを投げますか?関連するHTMLがなければ、それはちょうど投機です。質問を編集し、HTMLを含めてください。 – orde

答えて

0

対象とする<div>を指定する必要があります。同じclass属性を持つタグが2つ、場合によってはさらに<div>あります。

を考えると、このHTMLスニペット:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div> 

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div> 

あなたはロケータにインデックスを供給することにより、適切な<div>をターゲットにする必要があります。

p b.div(:class => 'ms-vb itx').link(:text => 'Rapid Alignment').exists? 
#=> true 
p b.div(:class => 'ms-vb itx').link(:text => 'Design Develop Integrate and Test').exists? 
#=> false 
p b.div(:class => 'ms-vb itx', :index => 1).link(:text => 'Design Develop Integrate and Test').exists? 
#=> true 

しかし、インデックスで要素を見つけることは壊れやすいことができたときにUIの場合と要素が変化する。 属性を使用して検索することを検討する必要があります(specによる)。

+0

リンクテキスト自体でリンクを識別できるので、これはまったく必要ありません。 – RAJ

+0

これは機能しました。みんな、ありがとう。 – Bhuvana

+0

"id属性を使用して検索することを検討してください。id属性は一意である必要があります。 IDは仕様に従って一意である必要があります。 –

1

私は思います問題は#divの使用で、1つのdivを返します

その後

divs.each do |d| 
    d.link.click 
end 

#divs代わり

divs = @browser.divs(class:'ms-vb itx') 

これを試してみてくださいので、すべてのEnumerable方法がselect例えばのようなものを含め、同様に動作しますEnumerableを含んDivCollectionを返します。

divs.select { |d| d.link(:text =>'Rapid Alignment') } 
+0

部門にリンクがなく、最後のコードが期待された回答でなくても、Rapidアライメントのテキストを持つリンクを選択したくない場合、すべてのリンク。 – RAJ

+1

@RAJこれは、質問を容易にする方法の例でした。前提は、 'ms-vb itx'はリンクラッパーであり、HTMLの投稿に基づいています。 'select'に関しては、' DivCollection'から所望のリンクをどのようにフィルタリングするかの例でした。 P.S.あなたのコードはインデックスのない – engineersmnky

0

div要素が同じであるので、それは同じのdiv毎回検索しようとして与えられたリンクを検索するために開始し、あなたは別のリンクを検索しようとするとき、それが二度目に失敗したため、これは失敗します。

実際にあなたがそのリンクを見つけるためのdivの必要はありません、あなたは単にそれがテキスト自体をリンク

b.link(:text=>'Rapid Alignment',:visible=>true).click 

b.link(:text=>'Design Develop Integrate and Test',:visible=>true).click 

がそのリンクに識別され、あなたはどの部門の必要はありません動作します。このコードを書きます直接b.link()を書いて、それで十分です。

+0

(ガラスハウス内のもの)でも動作しません。エラーが発生した場合、エラーを見つけることができません。ありがとう。 – Bhuvana

+0

@Bhuvanaリンクテキストが一意である限り、インデックスは必要ありません。単に 'b.a(:text、 'Rapid Alignment')と書いてみてください。 – RAJ

+0

@Raj、それは動作していません。エラーが表示されます。要素は現在表示されていないため、対話できません。 – Bhuvana

関連する問題