2016-06-29 13 views
1

テスト時にセレニウムにHTMLの要素が見つからないという問題があります。 ID、名前、タグ名で要素を探してみました。これらの方法のいずれも機能しません。セレニウムがHTMLの要素を見つけられない

HTML:

{% extends 'base.html' %} 
{% block body %} 

<h2 id='id_foo'>{% for foo in foo_list%} 
    #{{ foo.slug }} 
{% endfor%}</h2> 
<form method="POST" action='/'> 
<input name='add_foos' placeholder='MORE FOOS!' id='id_add_foo'/> 
{% csrf_token %} 
</form> 


{% endblock %} 

テストは、ここで働いていないテストコードのビットです。私はそれが間違ったページをチェックしていたかどうかを確認するためにチェックして、テストを右HTMLに取り組んでいたことが確認されている:暗闇の中で

foos = self.browser.find_element_by_id('id_foo') 

    self.assertIn('dayofservice', foos.text) 
+0

エラーが送出されますか?あなたは正しいページにいますか?ページに使用されているiframeはありますか? – alecxe

+0

それが示す唯一のエラーは、要素を見つけることができないということです。私は正しいページにURLを印刷してチェックしています。 – user2770624

答えて

1

ショット、あなただけgive time the element to become presentする必要があるかもしれません:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(self.browser, 10) 
foos = wait.until(EC.presence_of_element_located((By.ID, 'id_foo'))) 

self.assertIn('dayofservice', foos.text) 
+0

これも私に起こったし、私はドキュメントを読んだ。要素が見つからない場合は、ドライバに待機させるように指示できます。これはJavaの同等の 'driver.manage().timeouts()。implicitlyWait(2、TimeUnit.SECONDS);'であり、見つからなければ2秒待ちます。そうしたら、通常どおりに続けてください。これはハードコードされた 'wait'がテストを強制的に停止させるので、ドライバを初期化するときに便利ですが、暗黙的な待機は要素が見つからない場合にのみ待機します。 –

関連する問題