Как найти select с помощью Selenium, что контролируется javascript?

#java #selenium #xpath

#java #selenium #xpath

Вопрос:

У меня есть следующий select. Я хочу выбрать указанные элементы с помощью Java Selenium. Я пробовал это, но ни один из них не работал, я всегда получал нормальное использование, если я нажимаю на элемент, его

нет такого элемента: невозможно найти элемент: …

Вот мой код (ы):

 driver.findElement(By.xpath("//option[@value="2498847"]")).click();
        driver.findElement(By.xpath("/html/body/form/div/center/table/tbody/tr[2]/td[1]/font/select/option[2]")).click();
        driver.findElement(By.xpath("//html/body/form/div/center/table/tbody/tr[2]/td[1]/font/select/option[2]")).click();
  

Устал от класса Select:

 Select selector = new Select(this.driver.findElement(By.xpath("//select")));
selector.selectByVisibleText("Harris_SF_1");
  

Что я делаю не так?
Или можно имитировать щелчок javascript и вызвать этот скрипт с помощью Selenium?

HTML:

 <select size="10" name="DropDown" onchange="fSaveSearch(document.Form1.DropDown);">
    <option value="1715424">1960 cypress creek N</option><!---this shows the saved searches list--->
    <option value="2164877">Broker Closing Search</option>
    <option value="2498847">Harris_SF_1</option>
    <option value="1715426">Spring East</option>
    <option value="1715428">Spring Klein</option>
    <option value="1715429">Spring Klein Tomball</option>
    <option value="1715427">Spring NE</option>
    <option value="1715432">The Woodlands</option>
</select>
  

Конечная цель — имитировать щелчок по опции с определенным видимым текстом или значением.

Редактировать: iFrame сайта по умолчанию не тот, где находятся эти элементы / js writter. Если я изменю iframe в консоли Chrome, это сработает, но

 driver.switchTo().frame("SearchFrame");
  

Я что-то неправильно меняю в работе?

введите описание изображения здесь

Комментарии:

1. Что делает функция javascript onchange? Вы пытались найти атрибут select по имени?

2. Когда вы открываете страницу в Google Chrome, щелкните правой кнопкой мыши целевой элемент, а в разделе инструменты разработки щелкните правой кнопкой мыши выделенный HTML-код, выберите Копировать -> Копировать XPath, как выглядит строка XPath?

3. /html/body/form/div/center /table /tbody/tr[2] / td[1]/font /select /option[3] это предложенный chrome xpath.

4. Итак, элемент расположен под рамкой справа.. Итак, метод switchToFrame выдает какое-либо исключение? И почему бы вам не использовать name selector.. findElementByName('DropDown')

Ответ №1:

Спасибо, Мадан, ваш комментарий решил мою проблему. Но это сработало только после того, как я переключился на Defaultcontent, а затем переключился на нужный мне фрейм!

 driver.switchTo().defaultContent();
  

затем переключитесь на нужный мне фрейм:

 driver.switchTo.frame("Frame_ID");