2016-06-29 13 views
1

Ich habe ein Problem mit Selen nicht Elemente in meinem HTML zu finden, wenn ich ein Testen. Ich habe versucht, Elemente nach ID, Name und Tag-Namen zu finden. Keine dieser Methoden funktioniert.Selen nicht Elemente in HTML finden

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 %} 

Test, hier ist die Bit-Testcode, der nicht funktioniert. Ich habe überprüft, um zu sehen, ob es für die falsche Seite wurde überprüft und bestätigt haben, dass der Test auf der rechten Seite HTML arbeitete:

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

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

Gibt es irgendwelche Fehler? Bist du auf der richtigen Seite? Werden auf der Seite Iframes verwendet? – alecxe

+0

Die einzigen Fehler, die es zeigt, dass es das Element nicht finden kann, habe ich überprüft, ob es auf der richtigen Seite ist, indem ich die URL drucke. – user2770624

Antwort

1

Schuss im Dunkeln, aber Sie können nur müssen 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

Das passierte mir auch und dann las ich die Dokumente. Sie können dem Fahrer mitteilen, dass er warten soll, wenn das Element nicht gefunden wird. Dies ist das Java-Äquivalent 'driver.manage() .timeouts(). ImplicitlyWait (2, TimeUnit.SECONDS);' was besagt, wenn Sie es nicht finden, warten Sie 2 Sekunden. Wenn Sie das tun, machen Sie weiter wie gewohnt. Dies ist nützlich, wenn Sie Ihren Treiber initialisieren, da jedes hart codierte 'wait' den Test anhält, während ein implizites wait nur dann wartet, wenn ein Element nicht gefunden wird. –