2016-08-09 7 views
0

У меня есть ниже код в HTML для выпадающего спискаНевозможно выбрать из выпадающего списка

я написал ниже код селеном

WebElement grp = driver_new.findElement(By.xpath("html/body/div[2]/div/form/fieldset[5]/div[1]/select")); 
Select se = new Select(grp); 
se.selectByVisibleText("Aa"); 

Но я не получаю бит ошибки не выбирая любой value.How для решения Это. Он нажимает на выпадающее меню и не выбирает элемент из этого списка. Пожалуйста, помогите

+0

Можете ли вы делить точное сообщение об ошибке? – Moser

+0

updated..please check – john

+0

Эта ошибка не выглядит связанной с выпадающим списком. Добавьте в system.out.println после вашего selectByInvisibleText, чтобы узнать, действительно ли он думает, что он выбран? Дай мне знать. – Moser

ответ

0

Похоже, вы используете неправильный локатор. Попробуйте с этим:

WebElement blood_grp=driver_new.findElement(By.name("user_vitals[blood_group]")); 
    Select se=new Select(blood_grp); 
    se.selectByVisibleText("A +"); 
+0

Не работает..если я использую select по id (1), только я вижу, что он нажимает n, видит выпадающее меню, но не выбирает никакого значения – john

0
Select dropdown = new Select(driver.findElement(By.id("user_vitals_blood_group"))); 

выберите опцию O + вы можете сделать:

dropdown.selectByVisibleText("O +"); 

или сделать его в петлю и выбрать его по индексу

dropdown.selectByIndex(i); 

еще один путь для этого:

try{ 
    List<WebElement> options = driver.findElement(By.id("user_vitals_blood_group")).findElements(By.tagName("option")); 

    for (int i = 0; i < options.Size; i++) 
    { 
     new Select(driver.findElement(By.id("user_vitals_blood_group"))).selectByIndex(i); 
    } 

    } catch(Exception e) { 
     System.out.println(e); 
    } 
+0

попробуйте второй вариант –

+0

Извините синтаксическую ошибку. –

+0

нет, это моя ошибка, попробуйте фиксированный код (в большинстве я разрабатываю в C#) –

0

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

Вот пример ждут падения вниз метод нагрузки, который я использую -

// Method name, pass in the Select element named "dropDown" below 
public void waitForDropDownPopulate(WebDriver driver, final Select dropDown) { 
    WebDriverWait wait = new WebDriverWait(driver, 30); 
    try { 
     wait.until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver driver) { 
       List<WebElement> list = dropDown.getOptions(); // Get options in the list 
       //System.out.println("THE LIST SIZE IS: " +list.size()); 
       if (list.size() < 4) { // if the total items in the list is less than 4 - do nothing 
        //System.out.println("THIS LIST RETURNED FALSE"); 
        return false; 
       } else { 
        //System.out.println("THIS LIST RETURNED TRUE"); // once it's great than 4 allow the script to continue 
        return true; 
       } 
      } 
     }); 
    } catch(Exception e) { 
     System.out.println(e); 
    } 
} 

Так вы код должен выглядеть теперь следующим образом:

WebElement blood_grp=driver_new.findElement(By.name("user_vitals[blood_group]")); 
Select se=new Select(blood_grp); 
className.waitForDropDownToPopulate(driver, se); 
se.selectByVisibleText("A +"); 
+0

waitForDropDownToPopulate не определено – john

0

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

WebElement blood_grp=driver_new.findElement(By.id("user_vitals_blood_group")); 
Select se=new Select(blood_grp); 
se.selectByValue("A +"); 
+0

Я дал место – john

+0

Я не говорю о пространстве между A и +. В видимом тексте может быть пробел до и после «A +». Попробуйте с помощью selectByValue («A +») и посмотрите, работает ли он. –

+0

Пробовал не выбирать – john

0

Ваш код представляется мне правильным. Трудно сказать, что происходит, не имея возможности увидеть сайт для себя. Давайте немного отлаживаем. Код ниже должен работать. Выполните его, а затем опубликуйте, что он печатает. Я думаю, что есть что-то тонкое.

Select bloodGroup = new Select(driver.findElement(By.id("user_vitals_blood_group"))); 
System.out.println(bloodGroup.getOptions().size()); 
for (WebElement option : bloodGroup.getOptions()) 
{ 
    System.out.println(option.getAttribute("outerHTML")); 
} 

Вы пробовали различные варианты ниже? Что произойдет, когда вы попробуете их?

bloodGroup.selectByValue("A +"); 
bloodGroup.selectByIndex(3); 

Теперь, когда мы знаем, что код захватывает правильный SELECT и видит OPTION сек ... что произойдет, если вы попробуете код ниже.

Select bloodGroup = new Select(driver.findElement(By.id("user_vitals_blood_group"))); 
bloodGroup.selectByValue("A +"); 

... или это один ...

Select bloodGroup = new Select(driver.findElement(By.id("user_vitals_blood_group"))); 
bloodGroup.selectByIndex(3); 
+0

OK. Я обновил ответ ... попробуйте два примера кода, которые я только что добавил, и дайте мне знать, что произойдет. – JeffC

+0

Все должно работать. Я не знаю, что еще попробовать или что не так, не увидев сайт для себя. – JeffC

+0

Пожалуйста, дайте мне знать, в какое время вы будете в сети, сообщите адрес сайта – john