2016-06-29 8 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'가 테스트를 강제로 정지 시키므로 암시 적 대기는 요소가 발견되지 않을 때까지 기다리기 때문에 드라이버를 초기화 할 때 유용합니다. –

관련 문제