0

ナビゲーションリンクのページを読み込むこの方法は、コミットをテストするのに時間がかかります。ページが正しいURLで読み込まれていることを確認すると、私のテストは失敗します。私が書き込もうとしました:Selenium 2のメソッドで待機を書き込む方法は?

waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500); 

Thread.sleep(2000); 

これは私のコードです:

public void showNavigationLinks(){ 
     Actions action = new Actions(driver); 

     String[] submenus = {"Accessories", "iMacs", "iPads" , "iPhones" , "iPods" , "MacBook"}; 

     for(int i=0;i<submenus.length;i++) 
     { 
      waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'Product Category')]")), 500); 
      WebElement we = driver.findElement(By.xpath("//a[contains(.,'Product Category')]")); 

      action.moveToElement(we).moveToElement(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]"))).click().build().perform(); 

      //Checking correct URL 
      waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500); 
      Assert.assertTrue("checking if URL contains: " + submenus[i], 
        driver.getCurrentUrl().toLowerCase().contains(submenus[i].toLowerCase())); 
     } 
} 

これは私のエラーです:

java.lang.AssertionError: checking if URL contains: iMacs

答えて

0

あなたが期待されるURLを知っている場合は、使用することができます「愚かな」睡眠の代わりに動的な待つ。これは、(1分、1秒間に2回のポーリングよりもはるかに少ないであるかもしれない)までの1分間URLを待つとすぐ、それが発見されたように進行する:

WebDriverWait wait = new WebDriverWait(driver, 60); 
wait.until(ExpectedConditions.urlContains(submenus[i].toLowerCase())); 

ます場合にも(urlToBeを使用することができます正確なURLを知っているか)またはurlMatches(正規表現パターンを使用したい場合)。

+0

私がコードを書いたときにこのエラーを出す:org.openqa.selenium.TimeoutException:期待された条件は失敗しました: "Accessories"を含むURLを待っています。現在のURL: "http://store.demoqa.com/products-page/product-category/accessories/"(500ミリ秒の間隔で60秒間試しました) –

+0

@DyJonこの場合、あなたは 'toLower'を使うべきです。それに応じて私の答えを更新しました。 –

+0

これは今エラーです:org.openqa.selenium.TimeoutException:期待された条件は失敗しました: "ipods"を含むURLを待っています。現在のURL: "http://store.demoqa.com/products-page/product-category/iphones/"(500ミリリットル間隔で60秒間試しました) –

関連する問題