Выбор варианта в WebDriver - PullRequest
       2

Выбор варианта в WebDriver

0 голосов
/ 12 августа 2011

Я использую WebDriver и selenium-firefox-driver версии 2.3.1. Теперь, когда option.setSelected(); устарел, нужно сделать option.click(); напрямую или, более точно:

if (value.equals(option.getAttribute("value"))) {
    if(!option.isSelected()) {
        option.click();
        break;
    }
}

Проблема в том, что я получаю это исключение без причины.

Элемент в данный момент не виден и поэтому может не взаимодействовать с

<select id="deadLineDay" name="deadLineDay">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

Кроме того, это определенно не проблема времени ... Есть идеи, что это, черт возьми? Исключение выдается только иногда, но, как я уже сказал, не проблема синхронизации, я отлаживаю это

Это код:

public FillOutForm(WebDriver driver, UploadDocumentPage parent) {
    this.driver = driver;
    this.parent = parent;
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, 3), this);
}

@FindBy(how = How.NAME, using = day)
private WebElement deadLineDay;
@CacheLookup
@FindBy(how = How.NAME, using = hour)
private WebElement deadLineHour;
@CacheLookup
@FindBy(how = How.NAME, using = minute)
private WebElement deadLineMinute;
@CacheLookup
@FindBy(how = How.NAME, using = AmPm)
private WebElement deadLineAmPm;
@CacheLookup
@FindBy(how = How.ID, using = desc)
private WebElement description;
@CacheLookup
@FindBy(how = How.ID, using = comm)
private WebElement comment;

public boolean validationPasses(Map<String, String> map) {

    try {
        for (String key : map.keySet()) {
            WebElement we = (WebElement) this.getClass().getDeclaredField(key).get(this);
            setSelectedField(we, map.get(key));
        }
    } catch (Exception e) {
        throw new Error(e.getMessage());
    }

    valid = elementExists(driver, By.className(validatorError));

    return valid;
}

public void setSelectedField(WebElement element, String value) {
    List<WebElement> options = element.findElements(By.tagName("option"));
    for (WebElement option : options) {
        if (value.equals(option.getAttribute("value"))) {
            if(!option.isSelected()) {
                option.click();
                break;
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 августа 2011

У меня тоже была эта проблема.Попробуйте обернуть WebElement объектом Select:

import org.openqa.selenium.support.ui.Select;
...

public void setSelectedField(WebElement element, String value) {
    Select dropdown = new Select(element);
    dropdown.selectByVisibleText(value);
}
0 голосов
/ 14 августа 2011

Человек, в это может показаться трудно поверить, но месяц назад я часто выходил из-за недостатка места на диске, и внезапно все тесты терпели неудачу, как это.Очевидно, у него нет причины для сбоя, насколько я вижу из вставленного вами кода ...

Также я вижу, что вы используете AjaxElementLocatorFactory.Переключитесь на DefaultElementLocatorFactory, он может исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...