2016-07-01 4 views
0

次のコードがあります。driverclickdivに取得できません。それはエラーに要素が現在表示されていないため、ノードとセレンのドライバと対話できない可能性があります

を投げ続けてデバッグするときに、要素が表示されていることをはっきりと見ることができます

「要素が現在可視とそうではありませんが相互作用することはできません」。警告またはエラーを無視するにはどうすればよいですか?

var webdriver = require('selenium-webdriver') 
    , By = webdriver.By 
    , until = webdriver.until; 
var driver = new webdriver.Builder().forBrowser('firefox').build(); 
driver.get('http://www.vapeworld.com/'); 
driver.manage().timeouts().implicitlyWait(10, 10000); 
var hrefs = driver.findElements(webdriver.By.tagName("a")); 
hrefs.then(function (elements) { 
    elements.forEach(function (element) { 
     element.getAttribute('name').then(function (obj) { 
      if (obj == '1_name') { 
       console.log(obj); 
       element.click(); 
      } 
     }); 
    }); 
}); 
+0

あなたのhtmlを共有することができれば、私はあなたを助けることができます。しかし、私はそれがフレームかもしれないと思うし、あなたはそれをクリックする前にフレームに切り替える必要があります。 これを確認してください:http://toolsqa.com/selenium-webdriver/handling-iframes-using-selenium-webdriver/ それがあなたに役立つなら、それを回答として投稿してください。 – Jose

+0

ウェブサイトのページhtmlは質問に投稿したコードにあります。 – Yelitza

+0

あなたの質問では、あなたが "divをクリックしたかった"と述べました。ページ上の278のdivのうち、クリックしたいのはどれですか?良い質問をする方法のヘルプトピックを読んでから、あなたの質問を編集して、あなたが何を求めているかについてより詳細かつ明確にしてください。 – JeffC

答えて

-1

は、ウェブサイトを見て、ページを調査するために、F12ツール(クローム)を使用:

var elements = [].slice.call(document.getElementsByTagName("a")); 
var elementNames = elements.map(function (x) { return x.getAttribute("name"); }); 
var filledElementNames = elementNames.filter(function (x) { return x != null; }); 
console.log(filledElementNames); 

ウェブサイトhttp://www.vapeworld.comの内容は非常に動的です。状況に応じて、「x_name」を含む1つ以上のアンカーがあり、必ずしも「1_name」とは限らない:Chromeのスクリプトの出力は["2_name"]で、Edgeは["1_name"、 "9_name"、 "10_name" "17_name"、 "2_name"]したがって、「要素が可視であることをはっきりと見ることができます」とは、すべての状況で真実ではありません。また、この問題にはいくつかのバグがありましたので、必要に応じてドライバを更新する価値があります。ドライバが使用するすべての基準を説明しているので、thisの回答も参照してください。あなたはこのエラーを無視したい場合は、この例外をキャッチすることができます

try { 
    element.click(); 
} catch (Exception ex) { 
    console.log("Error!"); 
} 

は、より多くの説明についてはthisドキュメントページを参照してください。

+0

問題は要素を見つけられません。リストされた例では、要素が見つかりましたが、click要素を呼び出すことはできません.click(); 「要素は現在表示されておらず、相互作用しない可能性があります」 – CodeMilian

0

お客様のコードは、Aという名前の「1_name」タグをクリックしています。私は今、ページを見ていて、その要素は存在しない、隠れている、そうでなければ存在しません。

大量のコードをCSSセレクタ"a[name='1_name']"または"a[name='" + tagName + "']"に置き換えると、1つの検索で必要な要素を見つけることができます。その要素をクリックすることができます。

実行している問題は、クリックしようとしている要素が表示されないため、エラーメッセージです。 Seleniumは、ユーザーが見ることができる要素とのみ対話するように設計されています。これは可視要素です。探している要素を見つけて、それを見えるようにする方法を見つけ出す必要があります。ページ上の別のリンクをクリックしたり、パネルをスクロールしたりしている可能性があります。

ユーザのシナリオを気にせず、要素をクリックするだけの場合は、.executeScript()を参照してください。

関連する問題