Я немного запутался с вашим вопросом в ": раскрывающийся список Ajax виден, но не выбран"
. Похоже, элемент отключен.(Java-кодирование)
, если это так selenium.isElementDisabled()
, если нет,
1) программирование языкового решения с использованием цикла while и isElementPresent()
ИЛИ isElementDisabled()
//trigger the Ajax request and then
long initialTime = System.currentTimeMillis();
do{
thread.sleep(1000);
}while((!selenium.isElementPresent("AjaxElement")) && (System.getCurrentTimeMillis() - initialTime <= 5000)) ;
// что-то подобное выше для решения для программирования клиента ... но для,
2) встроенного решения селена
у нас есть метод, называемый waitForCondition("java script to be executed", "time out value");
, этот метод зацикливаетсяоператор javascript до тех пор, пока он не вернет истину или не будет предоставлено время ожидания
здесь важно проанализировать элемент application / Ajax, чтобы выяснить, какое конкретное условие элемента изменяется.
из вашего выраженияя предполагаю, что display=none
будет изменено на display=block
ИЛИ disabled=true
будет изменено на disabled=false
ИЛИ isReadOnly
будет изменено на отсутствие такого атрибута и т. д. (вам нужно выяснить это)
, а затем используйте эту attribute = value
для создания функции javascript, так как
selenium.waitForCondition("window.document.getElementById('AJAX ELEMENT').disabled == 'false'", "3000");
вы можете работать с приведенным выше утверждением так, как вам хочется на вашем языке программирования.
try {
//do the action which triggers the Ajax call
selenium.waitForCondition("window.document.getElementById('AJAX ELEMENT[drop down element]').disabled == 'false'", "3000");
//OR
selenium.waitForCondition("window.document.getElementById('AJAX ELEMENT').disabled == 'false'", "3000");
}
catch(SeleniumException se)
{
if((se.getMessage()).toLowerCase().contains("timed out")
throw //..some a custom exception however your organisation requires
}
selenium.select("drop down element id", "option id");
и тд .....