9

wait.until(ExpectedConditions)TWO要素で使いたい。テストを実行していますが、 Element1 または Element2WebDriverのいずれかが表示されるまで待つ必要があります。次に、最初に現れる人を選ぶ必要があります。私はもう試した:

WebDriverWait wait = new WebDriverWait(driver, 60); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h2[@class='....']"))) || wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h3[@class='... ']"))); 

        // Then I would need:

String result = driver.findElement(By.xpath("...")).getText() || driver.findElement(By.xpath("...")).getText();

要約すると、2 つの要素のいずれかが表示されるまで待つ必要があります。次に、現れた人を選んでください(同時に現れることはできません)助けてください。

4

8 に答える 8

20

現在、そのためのネイティブなソリューションであるorメソッドがあります。ドキュメントを確認してください

次のように使用します。

driverWait.until(ExpectedConditions.or(
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.something")),
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.anything"))));
于 2016-06-18T15:15:43.743 に答える
4

「OR」をxpathに入れると、問題は簡単に解決できると思います。

WebDriverWait wait = new WebDriverWait(driver, 60); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h2[@class='....'] | //h3[@class='... ']"))); 

次に、結果を印刷するには、たとえば次のように使用します。

if(driver.findElements(By.xpath("//h2[@class='....']")).size()>0){
       driver.findElement(By.xpath("//h2[@class='....']")).getText();
}else{
       driver.findElement(By.xpath("//h3[@class='....']")).getText();
}
于 2013-12-11T12:58:46.620 に答える
1

次のように CSSSelector を使用することもできます。

wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("h2.someClass, h3.otherClass")));

someClass と otherClass を xpath の [...] にあるものに置き換えます。

于 2016-01-02T18:06:24.113 に答える
0

残念ながら、そのようなコマンドはありません。これはトライ アンド キャッチで解決できますが、オープン ソースの Ruby ライブラリである Watirを使用することをお勧めします。

于 2013-03-18T03:20:22.423 に答える
0

満たすべき条件の数が可変である場合は、ここArrayList<>に示すように Java などの一般的なリストを利用して、次の操作を実行できます。

//My example is waiting for any one of a list of URLs (code is java)

    public void waitUntilUrls(List<String> urls) {
        if(null != urls && urls.size() > 0) {
            System.out.println("Waiting at " + _driver.getCurrentUrl() + " for " + urls.size() + " urls");
            List<ExpectedCondition<Boolean>> conditions = new ArrayList<>();
            for (String url : urls) {
                conditions.add(ExpectedConditions.urlContains(url));
            }

            WebDriverWait wait = new WebDriverWait(_driver, 30);
            ExpectedCondition<Boolean>[] x = new ExpectedCondition[conditions.size()];
            x = conditions.toArray(x);
            wait.until(ExpectedConditions.or(x)); // "OR" selects from among your ExpectedCondition<Boolean> array
        }
    }
于 2020-06-10T17:02:11.443 に答える