2017-03-13 12 views
-1
require 'rubygems' 
    require "watir" 

    browser = Watir::Browser.new :chrome,:switches => %w[--disable-notifications] 
    i=0; 
    begin 

    #TODO logining to the facebook 
    browser.goto 'linkedin.com' 
    browser.text_field(:id => 'login-email').set '[email protected]' 
    browser.text_field(:id => 'login-password').set 'ru09ec32' 
    browser.button(type: 'submit').click 

    puts '**** linkedin logged in ****' 

    sea = browser.div(:class => 'nav-search-bar') 
    puts sea 
    if sea.exits? 
    browser.div(:class => 'nav-search-bar').click 
    browser.div(:class => 'type-ahead-input-container').text_field.set 'wipro' 
    browser.button(:class => 'nav-search-button').click 
    puts '**** searched, the results for wipro is shown ' 
    else 
    puts 'div not present' 
    end 


    side = browser.div(:class => 'right-rail search-right-rail') 
    puts side 
    if side.present? 
    puts 'div present' 
    side1 = browser.divs(:class => 'right-rail search-right-rail') 
    else 
    puts 'div not present' 
    end 



    #TODO exception handling 
    rescue Exception => e 
    p "Error Found..... #{e.message}" 
    end 

を「?未定義のメソッドの存在は、PR存在します」私は存在のようないくつかのコードを試してみました。ワチール - Rubyコード、私はリアルタイムでのdivを見つけたことができていますが、私は、コマンド場合は使用してdiv要素をチェックすることができません、単に上記の実行中にエラーがスローされ

+2

不要なコードを削除し、最小限の反復可能コードを表示してエラーを表示できますか?コード内で例外を救済することなくスタックトレースを提供できますか? – titusfortner

答えて

-1

まず、if sea.exits?が間違っているこの行は、if sea.exists?

にこれを変更し、あなたのコードは完璧ですが、非常に微細な変化がワチールのを達成するために必要:あなたはRailsの外にあるのであれば、あなたはおそらく意味します定義済みの待機ステートメント。

4つのチェックが起こる場所をWatir::Divオブジェクトを呼びしようとしている方法は、

あるので、あなたは、あなたがこの方法を記述する場合、その後、ワチールの事前に定義された待ち時間が動作しないこの文を

side = browser.div(:class => 'right-rail search-right-rail') 

を使用例えば

、あなたが

browser.div(:class => 'right-rail search-right-rail').click 

を呼び出す場合、これら4つの以下のチェックが

が起こるのだろう
1)exist? 
2)enabled? 
3)present? 
4)writable? 

しかし、私が示したように関数を呼び出さなければ、要素がロードされる前でもステートメントが実行されているため、要素を返さないでしょう。その結果、side.present? falseで、それはあなたのdiv not present

だから今、あなたのコードは完璧に動作します、次のよう

browser.div(:class => 'right-rail search-right-rail').click 
    side = browser.div(:class => 'right-rail search-right-rail') 
    puts side 
    if side.present? 
    puts 'div present' 
    side1 = browser.divs(:class => 'right-rail search-right-rail') 
    else 
    puts 'div not present' 
    end 

でコードを変更するという結果が得られます。現在のメソッドはtrueを返します。

+0

これはあまり真実ではありません。 Watirは要素を読み込みませんので、要素を探すことなく要素を定義できます。あなたは、#クリックすると、4つのチェック(技術的には、 '#exist?'、 '#visible?'、 '#enabled?'、 '#writeable? ')を得ることができます。彼は 'if side.present? 'を呼びます。' #exist? 'と' #visible?'をまだチェックしています。より重要な違いは、 '#click'を使うときにWatirは実際に' #present? 'を呼び出すだけの条件が満たされるのを待つことです。しかし、彼が報告しているエラーは関係なく、これらのこととは関係ありません。 – titusfortner

+0

私はこれを知っています。はい、それはクリックや他の機能を試している間に操作の存在と残りを待っています。もし 'if b.div.exists? 'を直接書くと待たずに、私はこれをとても知っています明らかに。プログラム全体を実行しましたが、私が言及したもの以外のエラーはないので、私が問題を確実に解決すると言いました。あなたは 'watir lazyは要素を読み込みますが、特定のコードに達するとロードしません。これは、その特定の要素が現れるまで待つ 'click'関数を含んだものです。返信ありがとう。 – RAJ

+0

私は上記の回答を持っている –

-1

present?がRailsによってObjectに追加されました。すべての!side.nil?

+2

'Watir :: Element'クラスには、彼が使用しようとしている' #present? 'メソッドもあります。 – titusfortner

+0

正確なエラーは何ですか?これは通常、 "ObjectInstanceの未定義メソッドpresent?"のようなものです。この場合、ObjectInstanceは何ですか?エラーを出す行も含めてください。 – Leito

関連する問題