элемент Selenium webdriver select

у меня есть элемент управления select на моем сайте. Я использую объекты page для взаимодействия со страницей. Если я это сделаю (с первыми 2 строками под моим классом и selectByValue в мой метод)

@FindBy(id="foo")
private Select foo;

foo.selectByValue("myValue");

завершается с нулевым указателем. Я также пробовал без @FindBy.

теперь, если я делаю это в своем методе, все работает нормально и выбирает правильный элемент

Select foo = new Select(sDriver.findElement(By.id("foo")));
foo.selectByValue("myValue");

вот фактический веб-фрагмент для этого элемента управления (отредактированный для защиты невинный)

<select id="foo" name="service_name">
    <option selected="selected" value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
</select>

позвольте мне сказать, что у меня есть работа вокруг моей проблемы но я не понимаю, почему "нормальный" путь не работает.

3 ответов


вот так Select класс имеет конструктор:

Select(WebElement element)

посмотреть Javadoc

Итак, если вы сделаете что-то вроде этого:

@FindBy(id="foo")
private WebElement wannabeSelect;
Select realSelect = new Select(wannabeSelect);
realSelect.selectByValue("myValue");

это должно сработать.

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

sDriver.findElement(By.id("foo"));

возвращает WebElement, так вот почему его работы. Вы также можете сделать это:

 WebElement wannabeSelect = sDriver.findElement(By.id("foo"));
 Select foo = new Select(wannabeSelect);

есть два способа выбора значения параметра:

первый:

// Denotes option value - technical name
select.selectByValue(fieldValue);       

второй:

// Denotes option text that is actually visible to be selected
select.selectByVisibleText(fieldValue);

другим способом я достиг этого, используя метод ниже для всех моих ящиков onChange dropdownselection. Pass id и выбор, и он работает

public void onchangedropdownselection(String object, String value) {
        driver.findElement(By.id(object)).sendKeys(value);
        driver.findElement(By.id(object)).sendKeys(Keys.UP);
        driver.findElement(By.id(object)).sendKeys(Keys.DOWN);
    }

путем делать вверх и вниз мы initialzing на onChange, после чего скрипт.......