Selenium WebDriver - скрытый выбор и привязка

Возможный дубликат:
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"> --- odaberite tip --- </option>
        <option value="-1" class="special">> nema mog tipa  </option>
        <option value="16390">CD</option>
        <option value="17605">S</option>
        <option value="17636">SE</option>

</select>
<a href="" class="fs_item" id="fs_item_0" style=""> --- odaberite tip --- </a> 


Просмотр:

http://imageshack.us/f/7/screenshotfrom201209111.png/

Выбор скрыт, а href="" является видимой частью, которая меняет свой текст в зависимости от выбранной опции.

Я действительно не знаю, как управлять этим. Я могу получить все параметры с помощью JavascriptExecutor, и я могу использовать a.click() для просмотра раскрывающегося списка, но я не знаю, как щелкнуть какой-либо параметр.

Я пытался использовать класс Select и метод .getOptions(), но он не работает со скрытым выбором, и я не могу изменить текст href="".

:(

Пожалуйста, помогите мне с некоторым примером.


person Dario Car Šagud    schedule 11.09.2012    source источник
comment
Какой элемент вы пытаетесь щелкнуть? Selenium не будет взаимодействовать со скрытыми элементами.   -  person Arran    schedule 11.09.2012
comment
У меня есть варианты в моем списке [--- одаберите наконечник ---, CD, S, SE, › nema mog tipa], и мне нужно выбрать, например, CD и сделать аналогично select.selectByVisibleText(CD); (Выберите вариант и нажмите) См.: imageshack.us/f/7/screenshotfrom201209111.png   -  person Dario Car Šagud    schedule 11.09.2012
comment
Скорее всего, это возможно с помощью JavaScript   -  person Ripon Al Wasim    schedule 16.01.2013


Ответы (3)


Немного запутался с вопросом, но вы пробовали

WebElement element = driver.findElement(By.id("fw3k_ad_input_et_type_group"));
Select select = new Select(element);

Затем используйте либо

select.selectByValue(value);
select.selectByVisibleText(text);
select.selectByIndex(index);
person RKumsher    schedule 11.09.2012
comment
Я не могу использовать Select select = new Select(element); Исключение: исключение в потоке AWT-EventQueue-0 org.openqa.selenium.ElementNotVisibleException: элемент в настоящее время не виден, поэтому с ним нельзя взаимодействовать - person Dario Car Šagud; 11.09.2012
comment
Выбор не виден. Он работает в фоновом режиме. Якорь является видимой частью и меняет свой текст в зависимости от выбранной опции! - person Dario Car Šagud; 11.09.2012
comment
Используете ли вы jQuery для тестируемой страницы? Если это так, вы можете использовать JavascriptExecutor и выполнить $(#_id_fw3k_ad_input_et_type_group).val('16390'); - person RKumsher; 11.09.2012
comment
Я решил это с помощью JavascriptExecutor! JavascriptExecutor js = (JavascriptExecutor) драйвер; js.executeScript(document.getElementById('_id_fw3k_ad_input_et_type_group').style.display='';); - person Dario Car Šagud; 11.09.2012

1-й способ: не проблема щелкнуть любой элемент, используя тот же js. Как вы знаете, как получить любую опцию, последним оставшимся действием является выполнение щелчка. Это должно сработать для вас:

WebElement hiddenWebElement =driver.findElement(By(..selector of the element....));
        ((JavascriptExecutor)driver).executeScript("arguments[0].click()",hiddenWebElement);

2-й способ:

String cssSelector= ...//i gave them in your previous question
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSelector+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

3-й способ: с помощью конструктора действий, расширенного API действий пользователя. Вы можете прочитать об этом здесь. И код будет примерно таким:

WebElement mnuElement;
WebElement submnuElement;
mnEle = driver.findElement(By.Id("mnEle")).click();
sbEle = driver.findElement(By.Id("sbEle")).click();

Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.moveToElement(mnEle).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
driver.findElement(By.Id("sbEle")).click();

Вы также можете получить дополнительную информацию здесь Надеюсь, это вам как-то поможет)

person eugene.polschikov    schedule 11.09.2012

driver.findElement(By.name("_id_fw3k_ad_input_et_type_group")).sendKeys("16390");

работал на меня для чего-то очень похожего.

person Stilltorik    schedule 11.09.2012
comment
Хорошая попытка, но появляется исключение: Исключение в потоке AWT-EventQueue-0 org.openqa.selenium.ElementNotVisibleException: Элемент в настоящее время не виден, поэтому с ним нельзя взаимодействовать - person Dario Car Šagud; 11.09.2012
comment
спасибо, Стиллторик, в моем случае это сработало ... - person user790049; 27.07.2016