Не удается щелкнуть значение в раскрывающемся списке ввода

#selenium

#selenium

Вопрос:

У меня странная проблема. У меня есть выпадающий список без выбора с идентификатором, как показано ниже. В коде для этого поля нет тега выбора, который я вижу, просто тег ввода, и я не вижу текст, содержащийся в выпадающем списке в DOM после выбора значения. StaffSoCategory — это текстовое поле, SelectStaffSoCategory — это значок для стрелки выпадающего списка, а StaffSoCategoryValue, я полагаю, для отображаемых значений.

 <input type="text" id="StaffSoCategory" style="width: 126px; font-weight: lighter; border: 1px solid gray; height: 25px; float: left; font-size: 12px; color: black; font-family: Arial; background-color: white;" readonly="readonly" class="ui-autocomplete-input" autocomplete="off" disabled="disabled">

<span role="status" aria-live="polite" class="ui-helper-hidden-accessible">4 results are available, use up and down arrow keys to navigate.</span>

<div id="SelectStaffSoCategory" tabindex="0" style="border-style: solid; border-width: 1px 1px 1px 0px; border-color: gray; width: 22px; height: 29px; background-position: center; cursor: pointer; background-image: url('Images/dropdown.png'); background-repeat: no-repeat; float: left; margin-left: 0px; "></div>

***<input id="StaffSoCategoryValue" type="hidden" value="">***

<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-4" tabindex="0" aria-disabled="false" style="z-index: 1; display: none; top: 584px; left: 829px; width: 148px;"></ul>
  

Как только я выбираю первое выпадающее значение (видимый текст в раскрывающемся списке «Подтвержден»), значение отображается в теге, но не видимый текст значения, который я вижу, что-то вроде приведенного ниже

 <input id="StaffSoCategoryValue" type="hidden" value="BCK-Yes">
  

Есть ли способ щелкнуть по первому значению в раскрывающемся списке, я пробовал с этим значением «BCK-Yes», и указанный элемент не виден. Я попытался выбрать ввод по идентификатору, а затем нажать клавиши down и enter, что также не сработало.

Код, который я пытаюсь, является

 JavascriptExecutor js = (JavascriptExecutor)driver;     
WebElement revenuePotential = driver.findElement(By.id("SelectStaffSoCategory")); revenuePotential.click(); 
WebElement revenuePotentialValue = driver.findElement(By.id("StaffSoCategoryValue")); 
js.executeScript("arguments[0].click();", revenuePotentialValue); 
  

Ошибки консоли, которые я получаю, являются

 StaffSoJsFun.js?v=2019020100000:1 Uncaught TypeError: $(...).autocomplete is not a function
    at HTMLDivElement.<anonymous> (StaffSoJsFun.js?v=2019020100000:1)
    at HTMLDivElement.dispatch (jquery-2.0.0.js?v=2019020100000:25)
    at HTMLDivElement.y.handle (jquery-2.0.0.js?v=2019020100000:25)
(anonymous) @ StaffSoJsFun.js?v=2019020100000:1
dispatch @ jquery-2.0.0.js?v=2019020100000:25
y.handle @ jquery-2.0.0.js?v=2019020100000:25

Access to XMLHttpRequest at '' from origin 'xx.com' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
  

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

1. Таким образом, для отображения нескольких параметров в этом раскрывающемся списке должен быть html, а не только входные данные с изменяющимся значением. Входные данные в приведенном выше примере определенно выглядят как просто контейнер для выбранного значения. Выбранные значения, похоже, динамически добавляются в тег ul под ним. После загрузки страницы, нет ли тегов li внутри тега ul? Если нет, можете ли вы выполнить поиск в DOM в ваших инструментах разработчика для любых элементов на странице, которые содержат значения, отображаемые в раскрывающемся списке?

2. спасибо @Asyranok за комментарии. Да, я проверил все дерево DOM, я вижу только тег ul, и после выбора в Chrome текст в раскрывающемся списке никогда не отображается, в то время как Firefox, по крайней мере, показывает это в значении. Но я не могу выбрать на основе значения тега ul, потому что значение появляется только после того, как я нажимаю на раскрывающееся значение

3. Asyranok — Я изменил свой вопрос, добавив полные теги

4. Вы предложили разумное количество примеров html, так что я ценю это. Но у меня все еще возникают проблемы с визуализацией всего. Это случайно не общедоступный веб-сайт / страница? Если нет, есть ли у вас какой-либо javascript, который, как вы знаете, обрабатывает события вокруг этого? Если нет, я продолжу думать об этом и дам вам знать, если замечу что-нибудь полезное.

5. К сожалению, это не общедоступный код веб-сайта, еще раз спасибо за помощь — ценю это.

Ответ №1:

Ну, ввод скрыт, поэтому я не удивлен, что selenium сообщает вам, что элемент не виден. Методы, которые эмулируют действия пользователя, такие как click() и sendKeys , не смогут влиять на скрытые элементы. Тем не менее, я думаю, что может сработать следующее:

Сначала сохраните этот элемент в объекте, скажем element , а затем попробуйте следующий код, чтобы щелкнуть по этому скрытому элементу:

 WebDriver driver= new ChromeDriver();   

JavascriptExecutor js = (JavascriptExecutor)driver;

driver.get(desiredURL);

//do all the stuff you want to do before `executeScript()`

js.executeScript("arguments[0].click();", element);
  

Попробуем?

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

1. Я попробовал вышеупомянутое решение, исключения нет, но оно не щелкнуло по раскрывающемуся значению. Доходный потенциал WebElement = driver.findElement(By.id («SelectStaffSoCategory»)); revenuePotential.click(); WebElement revenuePotentialValue = driver.findElement(By.id («StaffSoCategoryValue»)); JavascriptExecutor js = драйвер JavascriptExecutor); js.executeScript(«аргументы[0].click();», потенциальное значение дохода);

2. @c-peck — изменил вопрос, чтобы добавить полные теги. Единственное, что меняется до и после выбора выпадающего значения, — это значение скрытых полей ввода, которое становится BCK-Yes после выбора первого значения из выпадающего списка «Подтверждено». Когда я попробовал на этом шаге драйвер JavascriptExecutor js = (JavascriptExecutor), открытый выпадающий список просто больше не становится видимым, а затем выполняемый скрипт ничего не делает

3. Вы импортировали JavascriptExecutor? Извините, просто чтобы убедиться

4. Еще один глупый вопрос: возможно, я его пропускаю, но я не думаю, что вы когда-либо говорили, какой язык вы пытаетесь использовать? Я только что предположил Java.

5. Да, Java и да, я знаком с классом JSExecutor и импортировал его.