我想从ajax获取选项的值。 HTML代码是:
<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>
正如您所看到的,因为在HMTL代码中可以使用id,所以使用webdriverWait(下面)无效。
dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
((By.ID, "j_id0:searchlayout:mainform:countryVal")))
我试过
dropdownCountry = wait.until(EC.element_to_be_clickable((By.XPATH, "//select[@id='j_id0:searchlayout:mainform:countryVal']/option")))
但它不会产生列表。
一个选项是使用 time.sleep(),为驱动程序提供足够的时间来加载国家/地区列表。但我知道这不是一个好习惯。
任何建议表示赞赏。 感谢
答案 0 :(得分:0)
尝试等待option
出现非空 value
属性:
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='')]")]
此外,您可能需要等到文本内容与option
不同的"Select Country"
出现:
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(text()='Select Country')]"))