| Both sides previous revisionPrevious revisionNext revision | Previous revision | 
| informatica:linux:selenium [2019/10/17 11:12]  –  jose | informatica:linux:selenium [2022/12/27 09:08] (current)  –  jose | 
|---|
|  |  | 
| ====== Padres e hijos ====== | ====== Padres e hijos ====== | 
|  |  | 
| Tenemos el siguiente código: | Tenemos el siguiente código: | 
| <code> | <code> | 
| </div> | </div> | 
| </div> | </div> | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="AUTONOMO CUENTA PROPIA"> | <div tabindex="-1" class="masterMenuItem promptMenuOption" title="AUTONOMO CUENTA"> | 
| <div class="promptDropdownNoBorderDiv"> | <div class="promptDropdownNoBorderDiv"> | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="AUTONOMO CUENTA PROPIA" id="saw_263580_c_1_ck3" aria-labelledby="saw_263580_c_1_ck3_cblabel" tabindex="-1" style="" type="checkbox"> | <input name="saw_263580_c_1" class="checkboxRadioButton" value="AUTONOMO CUENTA" id="saw_263580_c_1_ck3" aria-labelledby="saw_263580_c_1_ck3_cblabel" tabindex="-1" style="" type="checkbox"> | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck3" id="saw_263580_c_1_ck3_cblabel">AUTONOMO CUENTA PROPIA</label> | <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck3" id="saw_263580_c_1_ck3_cblabel">AUTONOMO CUENTA</label> | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="CUENTA AJENA FIJO"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="CUENTA AJENA FIJO" id="saw_263580_c_1_ck4" aria-labelledby="saw_263580_c_1_ck4_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck4" id="saw_263580_c_1_ck4_cblabel">CUENTA AJENA FIJO</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="CUENTA AJENA TEMPORAL"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="CUENTA AJENA TEMPORAL" id="saw_263580_c_1_ck5" aria-labelledby="saw_263580_c_1_ck5_cblabel" tabindex="-1" style="" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck5" id="saw_263580_c_1_ck5_cblabel">CUENTA AJENA TEMPORAL</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="ESTUDIANTE"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="ESTUDIANTE" id="saw_263580_c_1_ck6" aria-labelledby="saw_263580_c_1_ck6_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck6" id="saw_263580_c_1_ck6_cblabel">ESTUDIANTE</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="FUNCIONARIO"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="FUNCIONARIO" id="saw_263580_c_1_ck7" aria-labelledby="saw_263580_c_1_ck7_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck7" id="saw_263580_c_1_ck7_cblabel">FUNCIONARIO</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="NO ALTA SEG.SOCIAL"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="NO ALTA SEG.SOCIAL" id="saw_263580_c_1_ck8" aria-labelledby="saw_263580_c_1_ck8_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck8" id="saw_263580_c_1_ck8_cblabel">NO ALTA SEG.SOCIAL</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="NO TYPE JOB"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="NO TYPE JOB" id="saw_263580_c_1_ck9" aria-labelledby="saw_263580_c_1_ck9_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck9" id="saw_263580_c_1_ck9_cblabel">NO TYPE JOB</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="NOT IDENTIFIED"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="NOT IDENTIFIED" id="saw_263580_c_1_ck10" aria-labelledby="saw_263580_c_1_ck10_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck10" id="saw_263580_c_1_ck10_cblabel">NOT IDENTIFIED</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="OTHERS"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="OTHERS" id="saw_263580_c_1_ck11" aria-labelledby="saw_263580_c_1_ck11_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck11" id="saw_263580_c_1_ck11_cblabel">OTHERS</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="PENSIONISTA"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="PENSIONISTA" id="saw_263580_c_1_ck12" aria-labelledby="saw_263580_c_1_ck12_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck12" id="saw_263580_c_1_ck12_cblabel">PENSIONISTA</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="PROFESIONAL"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="PROFESIONAL" id="saw_263580_c_1_ck13" aria-labelledby="saw_263580_c_1_ck13_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck13" id="saw_263580_c_1_ck13_cblabel">PROFESIONAL</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="RENTISTA"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="RENTISTA" id="saw_263580_c_1_ck14" aria-labelledby="saw_263580_c_1_ck14_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck14" id="saw_263580_c_1_ck14_cblabel">RENTISTA</label> |  | 
| </div> |  | 
| </div> |  | 
| <div tabindex="-1" class="masterMenuItem promptMenuOption" title="SIN EMPLEO"> |  | 
| <div class="promptDropdownNoBorderDiv"> |  | 
| <input name="saw_263580_c_1" class="checkboxRadioButton" value="SIN EMPLEO" id="saw_263580_c_1_ck15" aria-labelledby="saw_263580_c_1_ck15_cblabel" tabindex="-1" type="checkbox"> |  | 
| <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck15" id="saw_263580_c_1_ck15_cblabel">SIN EMPLEO</label> |  | 
| </div> | </div> | 
| </div> | </div> | 
| </div> | </div> | 
| </code> | </code> | 
|  | {{:informatica:linux:padres_hijos.png|}} | 
|  |  | 
|  | Queremos hacer click en el checkbox, que es un campo input (la caja verde), pero es dinámico y no tiene el identificador. El indentificador está dentro del div que tiene el texto en title que es la caja padre en rojo | 
|  | {{:informatica:linux:padres_hijos2.png|}} | 
|  |  | 
|  | Primero seleccionamos el bloque padre, buscando por div y title que queramos: | 
|  | <code> | 
|  | menu_click='NULL' | 
|  | menu_click='AMA DE CASA' | 
|  | menu_click='CUENTA AJENA FIJO' | 
|  |  | 
|  | xpath='//div[@title="' + menu_click + '"]' | 
|  | padre = driver.find_element_by_xpath(xpath) | 
|  | </code> | 
|  | Ahora dentro de esa caja, selecctionamos el input para hacer click | 
|  | <code> | 
|  | xpath2='.//input[@type="checkbox"]' | 
|  | hijo = padre.find_element_by_xpath(xpath2) | 
|  | hijo.click() | 
|  | </code> | 
|  |  | 
|  | Si a partir de un elemento queremos seleccionar el padre:\\ | 
|  | Seleccionamos el elemento: | 
|  | xpath='//label[text()="AMA DE CASA"]' | 
|  | obj = driver.find_element_by_xpath(xpath) | 
|  | Y a partir de ese elemento el padre: | 
|  | padre=obj.find_element_by_xpath("./..") | 
|  |  | 
|  |  | 
|  | ====== Grabar el contenido de la web en un archivo ====== | 
|  |  | 
|  | ===== Texto ===== | 
|  |  | 
|  |  | 
|  | https://stackoverflow.com/a/50420667/2695864 | 
|  |  | 
|  | En mi caso fue muy útil porque no fui capaz, ni con chrome ni con firefox, de obtener el xpath de un popup que al hacer click en cualquier parte se cerraba. | 
|  |  | 
|  | <code> | 
|  | html = driver.execute_script("return document.body.innerHTML;") | 
|  | with open("login.html","w") as f: | 
|  | f.write(html) | 
|  | </code> | 
|  |  | 
|  | ===== Captura de pantalla ===== | 
|  |  | 
|  | <code> | 
|  | fichero = f"{datetime.datetime.now():%Y%m%d_%H%M%S}" | 
|  | driver.set_window_size(1080,1800) | 
|  | driver.save_screenshot("captura.png") | 
|  | driver.save_screenshot("captura_" + fichero + ".png") | 
|  | </code> | 
|  |  |