2017-02-14 2 views
1

Ich möchte den Wert der Option von einem Ajax erhalten. Der HTML-Code ist:Selen erhalten den Wert eines Ajax mit statischer ID

<select id="j_id0:searchlayout:mainform:countryVal" name="j_id0:searchlayout:mainform:countryVal" size="1" onchange="A4J.AJAX.Submit('j_id0:searchlayout:mainform',event,{'similarityGroupingId':'j_id0:searchlayout:mainform:j_id17','parameters':{'j_id0:searchlayout:mainform:j_id17':'j_id0:searchlayout:mainform:j_id17'} ,'status':'j_id0:searchlayout:mainform:statusProcess'})" style="height:2.4em;width:65%;"> 

<option value="" selected="selected">Select Country</option> 

wie Sie sehen können, da id in dem HMTL-Code zur Verfügung steht, ist die webdriverWait (unten) mit nicht helfen.

dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
    ((By.ID, "j_id0:searchlayout:mainform:countryVal"))) 

Ich versuchte

dropdownCountry = wait.until(EC.element_to_be_clickable((By.XPATH, "//select[@id='j_id0:searchlayout:mainform:countryVal']/option"))) 

aber es erzeugt keine Liste.

Eine Option ist die Verwendung time.sleep(), um dem Fahrer genügend Zeit zu geben, die Liste der Länder zu laden. Aber ich weiß, dass es keine gute Übung ist.

Jeder Vorschlag wird geschätzt. Dank

+0

Ich denke, es ist keine schlechte Praxis –

+0

oder verwenden Sie -> http://selenium-python.readthedocs.io/waits.html#implicit-wa sein –

Antwort

0

versuchen, bis Anwesenheit von option warten mit nicht leervalue Attribut:

dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
((By.ID, "j_id0:searchlayout:mainform:countryVal"))) 
dropdownCountry.click() 
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]")) 
list_of_options = [option.get_attribute('value') for option in driver.find_elements_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]")] 

Darüber hinaus müssen Sie möglicherweise bis option mit Textinhalt warten, der sich unterscheidet, ist von "Select Country" erscheint:

WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(text()='Select Country')]")) 
+0

Danke, aber ich habe diesen Fehler: raise ausnahmeklasse (message, bildschirm, stacktrace) selenium.common.exceptions.StaleElementReferenceException: Nachricht: {"errorMessage": "Element existiert nicht im Cache", "Anfrage": {"headers": {"Akzeptieren": "application/json", "Accept-Encoding": "identity", "Verbindung": "close", "Content-Length": "150", "Content-Type": "application/json; charset = UTF-8", "Host": "127.0.0.1:45065","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method" : "POST", "post": "{\" mit \ ": \" xpath \ ", \" sessionId \ ": \" b423c780-f2cd-11e6-8ec9-c1dae4070b7f \ ", – nakisa

+0

Ich denke, das liegt daran, weil nach 'dropdownCountry.click()' das ganze 'select' Element wurde durch' XHR' aufgefrischt .. Überprüfen Sie die aktualisierte Antwort – Andersson

+0

nein, ich probierte es ohne .click(). Der Fehler ist der gleiche. – nakisa

Verwandte Themen