J'essaie de sélectionner P0_ENGLISH
, P1_ENGLISH
, P5_ENGLISH
parmi plusieurs sélections qui ont 10 options. Je souhaite sélectionner uniquement ces 3 options.
CODE HTML:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
CODE SELENIUM-PYTHON:
queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6) .gwt-ListBox")) queues.select_by_visible_text("P0_English") time.sleep(3) queues.select_by_visible_text("P1_English") time.sleep(3) queues.select_by_visible_text("P5_English"
J'ai essayé d'utiliser ce code. Avec ce code, je suis en mesure de sélectionner la première option à savoir "P0_ENGLISH". Cependant, après avoir sélectionné la première option, j'obtiens une erreur:
<select multiple="" class="gwt-ListBox" style="height: 80px; width: 205px;"> <option title="Generic_Eng" value="Generic_Eng">Generic_Eng</option> <option title="Generic_Hindi" value="Generic_Hindi">Generic_Hindi</option> <option title="P0_English" value="P0_English">P0_English</option> <option title="P0_Hindi" value="P0_Hindi">P0_Hindi</option> <option title="P1_English" value="P1_English">P1_English</option> <option title="P1_Hindi" value="P1_Hindi">P1_Hindi</option> <option title="P4_English" value="P4_English">P4_English</option> <option title="P4_Hindi" value="P4_Hindi">P4_Hindi</option> <option title="P5_English" value="P5_English">P5_English</option> <option title="P5_Hindi" value="P5_Hindi">P5_Hindi</option> </select>
4 Réponses :
Dans le contexte de Selenium, une référence est périmée lorsque la référence n'est pas valide, car l'élément référencé a été supprimé, ou obsolète car l'élément a été détaché puis attaché par un client scénario. Sans connaître les mécanismes précis du script client, il peut y avoir différentes solutions. Le plus simple est de tenter à nouveau de référencer l'élément, c'est-à-dire
queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox")) queues.select_by_visible_text("P0_English") time.sleep(3) queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox")) queues.select_by_visible_text("P1_English") time.sleep(3) queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox")) queues.select_by_visible_text("P5_English")
Cela suppose que le sélecteur CSS reste le même après que la liste de sélection soit rattachée. Il est également possible que le sélecteur devienne invalide parce que l'élément a été supprimé ou son emplacement a été modifié. Dans le premier cas, vous voudrez lever une exception et la gérer de manière appropriée et, dans le second, découvrir ce que sera son nouveau sélecteur de manière empirique ou par analyse de code de script côté client. Pour en savoir plus sur StaleElementReferenceException ici .
Pour sélectionner plusieurs options à partir d'un élément Multi Select , vous pouvez utiliser ActionChains pour simuler le clic de contrôle comme suit :
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys myElemA = driver.find_element_by_css_selector(".rowStyle1:nth-child(6) .gwt-ListBox option[value='P0_English']") myElemB = driver.find_element_by_css_selector(".rowStyle1:nth-child(6) .gwt-ListBox option[value='P1_English']") myElemC = driver.find_element_by_css_selector(".rowStyle1:nth-child(6) .gwt-ListBox option[value='P5_English']") ActionChains(driver).key_down(Keys.CONTROL).click(myElemA).key_up(Keys.CONTROL).perform() ActionChains(driver).key_down(Keys.CONTROL).click(myElemB).key_up(Keys.CONTROL).perform() ActionChains(driver).key_down(Keys.CONTROL).click(myElemC).key_up(Keys.CONTROL).perform()
L'OP consiste à sélectionner une partie des éléments dans la liste de sélection multiple, mais si vous souhaitez sélectionner tous les éléments de la liste, voici les options.
JavaScript: p >
elements = driver.find_elements_by_css_selector(".gwt-ListBox option") for ele in elements: # select the item here
Pyhton
elements = driver.find_elements_by_css_selector(".gwt-ListBox option") driver.execute_script("arguments[0].forEach(function(ele){ele.selected=true;});",elements)
For me: Multi-select option present on Techlistic form site worked by below code when I used CSS Selector- https://www.techlistic.com/p/selenium-practice-form.html act=ActionChains(self.drv) WE_cmd= self.drv.find_element(By.CSS_SELECTOR,'#selenium_commands > option:nth-child(2)' ) opt=Select(self.drv.find_element(By.ID,"selenium_commands")) opt.select_by_visible_text("Browser Commands") act.key_down ( Keys.CONTROL ).click ( WE_cmd).key_up ( Keys.CONTROL ).perform ()
Veuillez modifier votre question afin que le formatage soit correct.
essayez
element = WebDriverWait (pilote, 10) .until (EC.presence_of_element_located ((By.xpath, title = "P0_English"))