2016-08-01 23 views
0

カレンダーから選択した日付に基づいてログインしてレコードを検索しようとしています。私は各ステップの後にtry catch例外を使用しました。 try catchをWebDriverWaitに置き換える必要があります。しかし、問題は、IDまたはXPathによって識別されるフィールドがページにあることです。だから私は試してみるのではなく、WebDriverWaitを実装する方法を理解していない。誰か助けてくれますか?以下は私のコード構造の詳細です。try catch例外をWebDriverWaitに変更するには

public class Login { 
    public static WebDriver driver; 
    String username = "username"; 
    String password = "password"; 
    String baseurl = "http://mybusiness.com/login.aspx"; 


public class Details { 
    @Test(priority = 0) 
    public void loginpage() { 
     //WebDriver driver = new FirefoxDriver(); 
     System.setProperty("webdriver.chrome.driver","D:\\From H\\Selenium Package\\ChromeDriver\\chromedriver_win32\\chromedriver.exe"); 

     DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
     capabilities.setCapability("chrome.switches", Arrays.asList("--incognito")); 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("--test-type"); 
     options.addArguments("--disable-extensions"); 
     capabilities.setCapability("chrome.binary","D:\\From H\\Selenium Package\\ChromeDriver\\chromedriver_win32\\chromedriver.exe"); 
     capabilities.setCapability(ChromeOptions.CAPABILITY, options); 


     driver = new ChromeDriver(capabilities); 
     driver.manage().deleteAllCookies(); 
     driver.manage().window().maximize(); 
     driver.get(baseurl); 

     try { 
      Thread.sleep(10000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
     WebElement username = driver.findElement(By.id("UserName")); 
     username.sendKeys(username); 
     try { 
      Thread.sleep(10000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
     WebElement password = driver.findElement(By.id("Password")); 
     password.sendKeys(password); 
     try { 
      Thread.sleep(10000); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
     WebElement button = driver.findElement(By.id("ButtonClick")); 
     button.click(); 
     try { 
      Thread.sleep(10000); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
    } 

    // Selecting a date from date picker 
    @Test(priority = 1) 
    public void RecordSearch() { 
     WebElement calendar = driver.findElement(By.id("CalendarId")); 
     calendar.click(); 
     try { 
      Thread.sleep(5000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

     WebElement month = driver.findElement(By.xpath("XPath")); 
     month.click(); 
     try { 
      Thread.sleep(5000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

     WebElement day = driver.findElement(By.xpath("XPath")); 
     day.click(); 
     try { 
      Thread.sleep(5000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

     WebElement submit = driver.findElement(By.id("Submit")); 
     submit.click(); 
     try { 
      Thread.sleep(10000); // 1000 milliseconds is one second. 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

    } 

     driver.close(); 
} 

答えて

0

簡単な例では、あなたのコード

try 
{ 
    Thread.sleep(10000); // 1000 milliseconds is one second. 
} 
catch (InterruptedException ex) 
{ 
    Thread.currentThread().interrupt(); 
} 
WebElement username = driver.findElement(By.id("UserName")); 
username.sendKeys(username); 

を取るだろうし、あなたがwaitを定義したら

String username = "username123"; 
WebDriverWait wait = new WebDriverWait(driver, 10); // 10 seconds 
WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("UserName"))); 
usernameField.sendKeys(username); 

に変更し、あなたが何度もそれを再利用することができ、それは同じ属性を持つことになり、例えば10秒の待ち時間。

String password = "abc123"; 
WebElement passwordField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Password"))); 
passwordField.sendKeys(password); 

注:私はあなたがusername.sendKeys(username);を使用していたことに気づきました。私は.sendKeys()Stringで、usernameWebElementと定義されているので、これは実際のコードではないと思っています。私はそれを私のコードで修正し、2つの異なる名前を付けました。

+0

サー。あなたの解決策が、私がこの一日中苦労したすべての混乱を解消したようです。はい、例のためにusername.sendKeys(userName)と(passWord)の代わりにusername.sendKeys(username)のスペルミスをしました。 – Arvind

+0

@JeffC ...「クラスの詳細をインスタンス化できません.Pkg_user.DetailSearch」エラーが発生しました。 "public class Login"の下に "WebDriverWait wait = new WebDriverWait(driver、10); // 10秒"と定義しています。 – Arvind

+0

@Arvindあなたが参照している行に関連していないようです。私はあなたが助けられるように、あなたが詳細で新しい質問を始めることをお勧めします。 – JeffC

1

暗黙の待機を追加する方がよいと思います。あなたが少しを探検した場合、あなたはWebDriverWaitの種類を見つけることができます

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
+0

私はimplicitlyWait ealierを試しました。しかし、うまくいきませんでした。それは私がtry catchのために回したものです。 – Arvind

+0

それが機能していないと言ったら、どういう意味ですか?それでも要素を見つけられなかったのですか、あなたはどれくらい待っていましたか? – Josh

+0

ログイン基準の後に要素が見つかりませんでした。私は時間を10秒に設定した – Arvind

0

:あなたはセットアップをしたら、あなたのドライバオブジェクトは、次の行を追加します。最も一般的なのはWebDriver.wait(timeinmilliseconds)です。

例えば、他の人はPS

wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id("froexample_username_txtbox"))); 

webDriver.waituntil (Expectedconditions)... 

wait.until(new ExpectedCondition<Boolean>() { 
    @Override 
    public Boolean apply(WebDriver driver) { 
     WebElement button = driver.findElement(By.className("sel")); 
     String enabled = button.getText(); 
     return enabled.contains(city); 
    } 
}); 

または、例えば以下の通りである:あなたがimplictのTIMEWAIT値がわからない場合には、より有用である可能性がdefine private final WebDriverWait wait;

。 (イベントや結果に特化したもの)

+0

暗黙のうちに私は最初に試してみたが、うまくいかなかった。このメソッドで確認してみましょう – Arvind

0

TここではセレンのWebDriverWait機能ですが、明示的に待機を設定することができます。あなたはSelenium webdriverを使用していますので、要素を待つ目的でWebDriverWaitを使用する方がはるかに優れています。以下のコードに従ってください

protected WebElement waitForPresent(final String locator, long timeout) { 
    WebDriverWait wait = new WebDriverWait(driver, timeout); 
    WebElement ele = null; 
    try { 
     ele = wait.until(ExpectedConditions 
      .presenceOfElementLocated(locator)); 
    } catch (Exception e) { 
     throw e; 
} 
return ele; 
} 

protected WebElement waitForNotPresent(final String locator, long timeout) { 
    timeout = timeout * 1000; 
    long startTime = System.currentTimeMillis(); 
    WebElement ele = null; 
    while ((System.currentTimeMillis() - startTime) < timeout) { 
     try { 
      ele = findElement(locator); 
      Thread.sleep(1000); 
     } catch (Exception e) { 
      break; 
     } 
    } 
    return ele; 
} 

要素が存在するのを待つ必要があるときはいつでも、期待されるパラメータでwaitForPresentメソッドを呼び出します。

+0

presenceOfElementLocatedByは適切な型ではなく、visibilityOfAllElementsLocatedByでもあります。 – Arvind

+0

問題が発生している場所を教えていただけますか?私はパラメータを持つメソッドでアクセスできるgeneralizeメソッドを与えました。私の場合、それは適切に働いています。 –

関連する問題