2013-07-01 8 views
0

Добрых день всем,Селен Выберите Hidden выпадающего меню

Так что мой вопрос я пытаюсь выбрать поля в раскрывающемся меню в том, что скрыто. Ниже приведен код HTML для одного из указанных выпадающих меню.

<div id="mainForm:defectPriorityField" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all ui-helper-clearfix" style="width:120px"> 
<div class="ui-helper-hidden"> 
<select id="mainForm:defectPriorityField_input" name="mainForm:defectPriorityField_input"> 
<option value="1-Urgent">1-Urgent</option> 
<option value="2-Very High">2-Very High</option> 
<option value="3-High">3-High</option> 
<option value="4-Medium">4-Medium</option> 
<option value="5-Low">5-Low</option> 
</select> 

Теперь я прочитал Есть несколько способов, которыми я могу это сделать. Ниже, кажется, самый популярный.

String cssSelector= ... 
JavascriptExecutor js = (JavascriptExecutor) driver; 
    StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append("var x = $(\'"+cssSelector+"\');"); 
    stringBuilder.append("x.click();"); 
    js.executeScript(stringBuilder.toString()); 

для XPath ниспадающего меню // * [@ ид = «MainForm: defectPriorityField_input»] Я относительно новый для этого, и я не уверен, как произвести или получить CSSSelector. Пожалуйста, если кто-нибудь может указать мне в правильном направлении, было бы весьма полезно.

+0

Я думаю, что правильный подход состоял бы в том, чтобы на самом деле щелкнуть по выпадающему меню, чтобы отобразить параметры, с которых они больше не скрыты и могут легко их выбирать. Вы пытались это сделать? –

+0

Да, я могу это сделать, но у меня есть еще одна проблема: некоторые из выпадающих меню являются динамическими, а то, что в них меняется, меняется. И единственный способ выбрать элемент в раскрывающемся списке - по его xpath. Который всегда меняется в зависимости от того, увеличился ли размер вниз и т. Д. –

+0

Я изначально собирался это сделать. Выберите параметрSelectField = new Выберите (driver.findElement (By.id ("mainForm: defectPriorityField_input"))); параметрSelectField.selectByVisibleText ("5-Low"); Но поскольку метод скрытого выбора поля не будет работать. –

ответ

0

Вот такой подход я бы, который является первым нажмите на выпадающее меню, а затем выберите параметр:

WebElement dropdown = driver.findElement(By.xpath("//div[@id=\"mainForm:defectPriorityField\"]); 
dropdown.click(); 

WebDriverWait waitForOptions = new WebDriverWait(driver, 3); 
waitForOptions.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id=\"mainForm:defectPriorityField_input\"]"))); 

WebElement option = driver.findElement(By.xpath("//div[@id=\"mainForm:defectPriorityField_input\"]/option[text()=\"1-Urgent\"]")); 
option.click(); 

Пожалуйста, простите любые синтаксические ошибки, но это по сути идея. В последнем утверждении для элемента option вы можете заменить текст «1-Срочный» на переменную или как угодно.

+0

Я буду дайте ему уйти и обновите спасибо. –

+0

К сожалению, это не сработало, получилось следующее сообщение об ошибке. После исправления незначительных проблем синтаксиса. Вызвано: org.openqa.selenium.remote.ErrorHandler $ UnknownServerException: Не удалось найти элемент: {"method ":" xpath "," selector ":" // div [@id = \ "mainForm: defectPriorityField_input \"]/option [text() = \ "1-Urgent \"] "} –

+0

Когда вы запускаете свою программу, вы действительно можете увидеть, отображается ли выпадающее меню?Если вы придерживаетесь этого xpath в firebug, это сработает? –

0

Если элемент скрыт, вы не должны его использовать. Так как пользователь тоже этого не сделал.

Если это не так, почему бы не использовать SelectElement?

SelectElement sel = new SelectElement(driver.FindElement(By.Id("Id"))); 
    sel.SelectByValue("Value"); 
+0

Это неверно, выпадающее меню отображается на веб-странице. Выделенная версия элемента скрыта и видны только идентификатор метки и идентификатор div, поэтому класс Select и методы выдают ошибку. –

Смежные вопросы