0

特定の要素がある場合とない場合があるWebページでテストを実行しています。手順は次のとおりです。フォームに記入し、[検索]ボタンをクリックします。ブラウザが新しいURLを開くとき、element_1を選択する必要がありますが、それが存在しない場合は、element_2を選択する必要があります。

WebElement element = driver.findElement(By.xpath("//....")) || driver.findElement(By.xpath("//..."));
element.click();

//これはトリックを行いません、他の方法はありますか?試してキャッチせずに行うことは可能ですか?

4

5 に答える 5

3

driver.findElement()を使用すると、暗黙の待機が行われます。したがって、secondElementが表示された場合でも、テストはしばらく待機します。代わりに、WebDriverWaitでfindElements()を使用する方が良い解決策かもしれません。

    WebDriverWait wait = new WebDriverWait(driver, 10);
    // Wait for one element to be available
    wait.until(new Predicate<WebDriver>() {
        @Override public boolean apply(WebDriver driver) {
            return driver.findElements(By.cssSelector("xpath1")).size() > 0
                    || driver.findElements(By.cssSelector("xpath2")).size() > 0;
        }
    });
    // Get the element
    WebElement e = null;
    if (driver.findElements(By.cssSelector("xpath1")).size() > 0)
        e = driver.findElements(By.cssSelector("xpath1")).get(0);
    else if (driver.findElements(By.cssSelector("xpath2")).size() > 0)
        e = driver.findElements(By.cssSelector("xpath1")).get(0);

    if (e != null)
        e.click();
于 2013-03-19T07:42:33.237 に答える
2

このようなことを試すことができます。はい、try ブロックと catch ブロックを使用していますが、isDisplayed()、isEnabled()、isSelected() 以外に特別なメソッド isPresent() がなく、何が問題なのか、これが従うべき手順です。とにかくtryとcatchブロックで例外を処理するには?

boolean isElement1Present = true;

try{       
      driver.findElement(By.xpath("xpathExpression1"));    
}catch (NoSuchElementException e){
    isElement1Present = false;
}

if(isElement1Present == false)
     driver.findElement(By.xpath("xpathExpression2"));

または、以下を使用すると、try および catch ブロックが回避されます。

List<WebElement> elements = driver.findElements(By.xpath("xpathExpression1"));   

if (elements.size() == 0) {
    System.out.println("Element is not present"); 
} else {
    System.out.println("Element is present");
}
于 2013-03-19T07:11:14.427 に答える
1

これはあなたを助けるかもしれません

 WebElement element = null;

try{
    element = driver.findElement(By.xpath("//path1/...."));
}catch(NoSuchElementException ex){
    try{
        element = driver.findElement(By.xpath("//path2/...."));
    }catch(NoSuchElementException ex2){}
} 

if(element!=null) element.click();
于 2013-03-19T07:06:50.543 に答える
1

実は明確な方法はありません。使用できますWATIR。に問題がなければ、そのようなコードを提供しますRuby。それ以外の場合は、キャッチしようとします。

于 2013-04-30T01:16:06.607 に答える
0

ここでのより良いアプローチは、コンマを使用してセレクターをグループ化できる CSS3 セレクターを使用することだと思います。

python についてお詫び申し上げます。

element = WebDriverWait(driver, 2).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "tr.entry , div.not-found"))
)

<div class="not-found">何も見つからない場合に Web ページが表示されると仮定します。または、結果を表示します<tr class="entry">

于 2014-10-23T20:48:17.497 に答える