GOOGLE ADS

суббота, 7 мая 2022 г.

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

Я пытался использовать модуль Select, но когда я это делаю, элемент либо не взаимодействует, либо «не виден». Вот соответствующие коды.

HTML

< head >
< script >
function onChangeCardType() {
var value = $('#card_type').val();
$('#img_' + value).siblings().hide();
$('#img_' + value).show();
}
</script>
</head>
<body>
<table>
<thead>
<tr>
<th align="left">Card type</th>
<td colspan="2" style="font-size:12px;">
<select name="requestDTO.vpc_card" id="card_type" onchange="onChangeCardType()"
class="select required"
style="width: 342px; font-size:12px;">
<option value="Amex" >American Express</option>
<option value="Mastercard" >MasterCard</option>
<option value="Visa" >Visa</option>
<option value="JCB" >JCB</option>
</select>
<a class="ui-selectmenu ui-widget ui-state-default select required ui-selectmenu-dropdown ui-corner-all" id="card_type_button_435" role="button" href="#" aria-haspopup="true" aria-owns="card_type_menu_435" aria-expanded="false" tabindex="0" style="width: 336px;"><span class="ui-selectmenu-status">Visa</span><span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s"></span></a>
<span class="ui-selectmenu-status">Visa</span>
<span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s"></span>

</td>
</tr>
</thead>
</table>
</body>

Код

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
#testing on a website that's not public yet, so I won't show the set-up here,but if it's required I can too
cardtype = Select(driver.find_element_by_id("card_type"))
cardtype.select_by_value("Mastercard")
sleep(1)
driver.implicitly_wait(2)
Using Firefox: ElementNotInteractableException:
Element <option> could not be scrolled into view
Using Chrome:
ElementNotVisibleException: element not visible:
Element is not currently visible and may not be manipulated
# sleep nor implicitly_wait doesn't help too...

Я также пытался просто щелкнуть поле (не используя тег select, я мог бы щелкнуть по нему с помощью class="ui-selectmenu", но .send_keys(KEYS.ARROW_DOWN)не работает (дает AttributeError).

Есть ли способ определить текст в опции и щелкнуть по нему без использования модуля «Выбор»? Или есть способ заставить модуль Select работать в этом случае?


Решение проблемы

большое спасибо за ответы! К сожалению, в данном случае проблема действительно была не в ожидании:/

Что действительно сработало для меня, так это цепочки действий. Цепочки действий работают, потому что вам не нужно ориентироваться на элемент. Итак, в своем посте я упомянул, что могу щелкнуть раскрывающийся список, и стрелки вниз не работают, потому что выдают ошибку AttributeError. Однако это было потому, что я пытался нацелиться на элемент!

Итак, вот ответ, который сработал для меня:

cardtype = driver.find_elements_by_class_name("ui-selectmenu-status")
cardtype.click()
actions = ActionChains(driver)
actions.send_keys(Keys.ARROW_DOWN)
actions.send_keys(Keys.ENTER)
actions.perform()

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

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...