Selenium WebDriver - получить параметры из скрытого выбора

Я хочу получить все параметры из скрытого выбора. Выберите «отображение: нет;» части, поэтому я столкнулся с проблемой.

<select name="fw3k_ad_input_et_type_group" 
            class="" id="_id_fw3k_ad_input_et_type_group" 
            onchange=" eurotax.change_type_group( this.value ); " 
            style="display: none; ">

        <option value="0">1</option>
        <option value="-1" class="special">2</option>
        <option value="16390">CD</option>
        <option value="17605">S</option>
        <option value="17636">SE</option>

</select>

Мой код:

Select tipSelect = new Select(driver.findElement(By.name("fw3k_ad_input_et_type_group")));
for (WebElement b : tipSelect.getOptions()) {
            System.out.println(b.getText());
}

Пожалуйста, покажите пример кода, если он у вас есть.

представление firebug: http://imageshack.us/f/138/primjer.png/ ПОСМОТРИТЕ ЭТО


person Dario Car Šagud    schedule 10.09.2012    source источник
comment
Я не могу получить текст опции. В данном случае 1, 2, CD, S, SE.   -  person Dario Car Šagud    schedule 10.09.2012


Ответы (2)


В firebug можно выбирать элементы с помощью «display: none;» атрибут. Они будут обведены не на странице, а в древовидной структуре html. см. пример проверки элемента с помощью firebug с отображением: нет; атрибут

Затем убедитесь, что вы правильно нашли элемент с помощью firebug.

String optn=select[name="fw3k_ad_input_et_type_group"] option[value="0"]
//optn1=select[name="fw3k_ad_input_et_type_group"] option[value="-1"]
//optn2=select[name="fw3k_ad_input_et_type_group"] option[value="16390"]
//optn3=select[name="fw3k_ad_input_et_type_group"] option[value="17605"]
//optn4=select[name="fw3k_ad_input_et_type_group"] option[value="17636"]

затем попробуйте использовать исполнителя jscript (всегда должно работать, не принимая во внимание, виден ли элемент или нет)

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("var x = $(\""+optn+"\");");
        stringBuilder.append("return x.text().toString();")       ;


       String res= (String) js.executeScript(stringBuilder.toString());

Надеюсь, эта работа для вас)

person eugene.polschikov    schedule 10.09.2012

Дело в том, что селен не может щелкнуть невидимые элементы (или взаимодействовать с невидимыми элементами другими способами). Так что js должен помочь. Я бы решил это следующим образом:

String css1="ul>li:last-child>div[id=unos_select_wrap] select[id="_id_fw3k_ad_input_et_type_group"]>option[value='0']";
String css2="ul>li:last-child>div[id=unos_select_wrap] select[id="_id_fw3k_ad_input_et_type_group"]>option[value='-1']";
String css3="ul>li:last-child>div[id=unos_select_wrap] select[id="_id_fw3k_ad_input_et_type_group"]>option[value='16390']";
String css4="ul>li:last-child>div[id=unos_select_wrap] select[id="_id_fw3k_ad_input_et_type_group"]>option[value='17605']";
String css5="ul>li:last-child>div[id=unos_select_wrap] select[id="_id_fw3k_ad_input_et_type_group"]>option[value='17636']";

public void getOptionTextAndPrintIt(String cssSelector){
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("var x = $(\""+cssSelector+"\");");
        stringBuilder.append("return x.text().toString();");
       String res= (String) js.executeScript(stringBuilder.toString());
    System.out.println(res);

}
public void allOptionValuesDepiction(){
getOptionTextAndPrintIt(css1);
getOptionTextAndPrintIt(css2);
getOptionTextAndPrintIt(css3);
getOptionTextAndPrintIt(css4);
getOptionTextAndPrintIt(css5);
}

Пожалуйста, дайте мне знать, если что-то не так, как только вы проверите.

person eugene.polschikov    schedule 10.09.2012
comment
Оно работает! Я решил такую ​​проблему: JavascriptExecutor js = (JavascriptExecutor) driver; Строковый скрипт = var sb = []; + var select = document.getElementById('_id_fw3k_ad_input_et_type_group'); + for (var i=0; i‹select.length; i++) { + sb.push(select.options[i].text + ','); + } + вернуть sb;; - person Dario Car Šagud; 10.09.2012
comment
Просто используйте JavascriptExecutor и создайте цикл for для получения текста опции (select.options[i].text) - person Dario Car Šagud; 10.09.2012