Как выбрать несколько вариантов из элемента множественного выбора, используя Selenium-Python?

Как вы можете видеть из примера. Селекторы работают, когда они динамически генерируются. Я считаю, что у вас есть проблема с вложенными селекторами в css.

let buttons = [];
const CLS = ["thin", "button"];
let add_btns = document.querySelector('.add-btn');
add_btns.addEventListener("click", function () {
   let i = 0;
  while (i <= 40) {
      let btn = document.createElement("BUTTON");
      buttons.push(document.body.appendChild(btn));
      i++;
      for (let button in buttons) {
          btn.setAttribute('id', "button " + button);
          btn.classList.add(...CLS);
          btn.innerHTML = "Button # " + button;
      }
      btn.addEventListener("click", function () {
          let id = this.id;
          alert("my id is: " + id);
      });
  }
});
.button {
  padding: 10px;
}

.thin {
  padding: 0px 10px;
}
<button class="add-btn button">Add</button>

0
задан DebanjanB 19 January 2019 в 21:22
поделиться

2 ответа

В контексте Selenium ссылка является устаревшей , когда ссылка недействительна, поскольку указанный элемент был удален или устарел, так как элемент был отсоединен и затем присоединен клиентским скриптом , Не зная точной механики клиентского скрипта, возможны разные решения. Самое простое - попытаться снова сослаться на элемент, т. Е.

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")

Предполагается, что селектор CSS остается прежним после повторного присоединения списка выбора. Также существует вероятность того, что селектор станет недействительным, поскольку элемент был удален или его местоположение было изменено. В первом случае вы хотите создать исключение и обработать его соответствующим образом, а во втором - выяснить, каким будет его новый селектор, либо эмпирически, либо с помощью анализа кода скрипта на стороне клиента. Подробнее об исключении StaleElementReferenceException здесь .

0
ответ дан adq 19 January 2019 в 21:22
поделиться

Чтобы выбрать несколько опций из элемента Multi Select , вы можете использовать ActionChains , чтобы смоделировать . Управление Нажмите следующим образом:

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()
0
ответ дан DebanjanB 19 January 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: