web-dev-qa-db-ja.com

Selenium:選択のオプションが入力されるのを待つ方法は?

私は初めてSeleniumを使用していますが、オプションに圧倒されています。 FirefoxでIDE)を使用しています。

私のページが読み込まれると、その後、JSONPリクエストを介して値がフェッチされ、selectにオプションが入力されます。

続行する前に、選択の特定のオプションが表示されるのをSeleniumに待機させるにはどうすればよいですか?

17
mydoghasworms

私はあなたが使うべきだと思います

waitForElementPresentコマンド。可能であれば、Selenium IDEコードを見てみましょう。

1
user1699797

waitForElementPresent with css targetを使用しました。

例:待つ

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

を入力する

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

使用する

  • コマンド:waitForElementPresent
  • 目標: css=#myselect option[value=123]
  • 値:(空のままにします)
13
user1460043

私は次のような便利なものを見つけました:

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

ドロップダウン内のオプションがサードパーティのサービスからフェッチされるという同様の問題がありましたが、これは操作が遅い場合がありました。

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);
                        }
                    });
        }

注:この場合、静的オプションが常に1つ表示されていたため、select.getOptions()。size()> 1のチェックが必要でした。

2
Sanjay Bharwani

「WaitForSelectOption」コマンドを使用して、値をlabel = 1のような直接ラベルにすることができます-普通預金口座のターゲットにはオブジェクトIDがあります

2
Manas

が入力されたときにselectを返すC#で次の関数を作成しました。

要素を見つけるには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;
        }
        );
    }

私の場合、選択に3つ以上のオプションがあることを検証します。コードを変更して、ニーズに合った数量を検証できます。

1
Felipe Correa

Java 8Awaitilityを使用する

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

私のためのその仕事:

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