Подтвердить что ты не робот

Selenium: Как подождать варианты в выбранном для заполнения?

Я использую Selenium в первый раз и перегружен вариантами. Я использую IDE в Firefox.

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

Как мне заставить Selenium ждать, пока какой-либо вариант в предложении будет присутствовать, прежде чем продолжить?

4b9b3361

Ответ 1

Я думаю, вам следует использовать

waitForElementPresent. Если возможно, позвольте мне увидеть ваш код IDE селена.

Ответ 2

Я использовал waitForElementPresent с целевой css.

Пример: ждать

<select id="myselect"></select>

для заполнения

<option value="123">One-two-three</option>

использование

  • Команда: waitForElementPresent
  • Цель: css=#myselect option[value=123]
  • Значение: (оставьте его пустым)

Ответ 3

Вы можете использовать команду "WaitForSelectOption", где ваше значение может быть прямой меткой как label = 1-save account target будет иметь идентификатор объекта

Ответ 4

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

Select select = new Select(driver.findElement(cssSelector("cssSelectorOfSelectBox")));    
waitUnitlSelectOptionsPopulated(select)

вот определение для waitUnitlSelectOptionsPopulated

private void waitUntilSelectOptionsPopulated(final Select select) {
            new FluentWait<WebDriver>(driver)
                    .withTimeout(60, TimeUnit.SECONDS)
                    .pollingEvery(10, TimeUnit.MILLISECONDS)
                    .until(new Predicate<WebDriver>() {
                        public boolean apply(WebDriver d) {
                            return (select.getOptions().size() > 1);
                        }
                    });
        }

Примечание: проверка select.getOptions(). size() > 1 была необходима в нашем случае, поскольку мы всегда показывали один статический параметр.

Ответ 5

Я сделал следующую функцию в С#, которая возвращает выбор при заполнении.

Вам нужно передать By, чтобы найти элемент, и вам нужно определенное время, чтобы дождаться его заполнения:

public static SelectElement FindSelectElementWhenPopulated(this IWebDriver driver, By by, int delayInSeconds)
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(delayInSeconds));
        return wait.Until<SelectElement>(drv => 
        {
            SelectElement element = new SelectElement(drv.FindElement(by));
            if (element.Options.Count >= 2)
            {
                return element;
            }

            return null;
        }
        );
    }

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

Ответ 6

Его работа для меня:

  WebElement element = driver.findElement(By.xpath("//select[@name='NamE']/option[1]"));
  return element.getAttribute("text");

Ответ 7

Мне понравилось что-то вроде:

wait.until(
    ExpectedConditions
        .presenceOfNestedElementsLocatedBy(By.id(<selectioNId>), By.tagName("option"))
)

Ответ 8

Использование java 8 Awaitility

Awaitility.await()
.atMost(5, TimeUnit.SECONDS)
.until(() -> select.getOptions().size() > 0);