With Selenium how to use WebDriverWait for a value

Viewed 187

I have two drop down boxes "A" and "B". When I select an option in box "A" the options inside box "B" change. So i have to wait some seconds for refresh the values.

This is the "B" HTML code:

<select name="ctl00$body$ddpProjeto" onchange="javascript:setTimeout('__doPostBack(\'ctl00$body$ddpProjeto\',\'\')', 0)" id="body_ddpProjeto" class="form-control" required="required">
<option value="Sistema de Bombeamento de Água Gelada  - 2019">Sistema de Bombeamento de Água Gelada  - 2019</option>
<option value="Obras Civis no Nível Térreo do Forno RW25 - 2019">Obras Civis no Nível Térreo do Forno RW25 - 2019</option>
<option value="Fluxogramas de Utilidades RW25 - 2020">Fluxogramas de Utilidades RW25 - 2020</option>
<option value="Quadros Elétricos RW25 - 2020">Quadros Elétricos RW25 - 2020</option>
<option value="EMPLACAMENTO BALIZADAS FORNO RW25 - 2020">EMPLACAMENTO BALIZADAS FORNO RW25 - 2020</option>
<option value="OBRAS CIVIS NÍVEL TÉRREO FORNO RW25 - 2020 - 2020">OBRAS CIVIS NÍVEL TÉRREO FORNO RW25 - 2020 - 2020</option>

I was trying with this code:

def EDM_CRIA_DOCUMENTO(titulo, areafisica,classe,tipo="Desenhos de detalhamento (Drawing)",projeto="Quadros Elétricos RW25 - 2020"):
global driver

opt_af = Select(driver.find_element_by_name(r"ctl00$body$ddpAreaFisica"))  #Acha a lista Area Fisica
opt_af.select_by_visible_text(areafisica)

wait = WebDriverWait(driver, 10)
wait.until(ec.text_to_be_present_in_element(By., projeto))

opt_proj = Select(driver.find_element_by_id("body_ddpProjeto"))  #Acha a lista projeto
opt_proj.select_by_visible_text(projeto)  # Seleciona na lista "Nome_do_Projeto"

But I don't know how to set the "WebDriverWait" in this condition.. Someone can help?

1 Answers

If you have some specific set of values which will be displayed in box "B" after selecting "A", then you can apply wait on any of the element of "B" and whenever that element is present you can operate on the "B".
You can do it like:

def EDM_CRIA_DOCUMENTO(titulo, areafisica,classe,tipo="Desenhos de detalhamento (Drawing)",projeto="Quadros Elétricos RW25 - 2020"):
global driver

opt_af = Select(driver.find_element_by_name(r"ctl00$body$ddpAreaFisica"))  #Acha a lista Area Fisica
opt_af.select_by_visible_text(areafisica)

# Wait for the first value in "B" to be present 
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//option[contains(text(),'Sistema de Bombeamento de')]")))

# Now operate on the element
opt_proj = Select(driver.find_element_by_id("body_ddpProjeto"))  #Acha a lista projeto
opt_proj.select_by_visible_text(projeto)
Related