2017-06-09 6 views
0

要素makePaymentButtonが有効になっていないか表示されていませんが、ループは終了しません。要素が有効/表示されていなくてもループは終了しません

エラー:スレッドの例外 "メイン" org.openqa.selenium.NoSuchElementException:idを持つ要素を見つけることができません== makePaymentButton

while(driver.findElement(By.id("makePaymentButton")).isEnabled()) 
{ 
    Thread.sleep(4000); 
    driver.findElement(By.name("password_ccCvv")).sendKeys("999"); 
    Thread.sleep(4000); 
    driver.findElement(By.id("makePaymentButton")).click(); 
    Thread.sleep(9000); 
} 
+0

whileループではなく、Webドライバ待機を使用して要素の可視性を待つことができます。 – Murthi

+0

私はこれに何が問題なのか、そしてなぜこのループがないのかの解決策を探しています。 – Apoorve

+0

例外を受け取ったらループは終了しますか? – Murthi

答えて

0

これは、もう表示されない要素を見つけようとしているためです。 findelementコードを "try"に入れる必要があります。

WebElement verificator = driver.findElement(By.id("makePaymentButton")).isEnabled() 
while(verificator) 
      { 
     Thread.sleep(4000); 
     try { 
      driver.findElement(By.name("password_ccCvv")).sendKeys("999"); 
      Thread.sleep(4000); 
      driver.findElement(By.id("makePaymentButton")).click(); 
      Thread.sleep(9000); 

     } catch (Exception e) { 
      verificator = false; 
     } 

    } 

これは擬似コードです:

は次のようなものでなければなりません。それがうまくいかない場合、plsはsintaxを確認します

0

わからないあなたは、whileループを選んだ理由が、誰もなしに同じことを達成することができます。次の例では、Explicit Waitが使用されています。

// Define and wait (up to 10 seconds) for the "Make Payment" button 
WebElement btnMakePayment = (new WebDriverWait(driver, 10)) 
.until(ExpectedConditions.presenceOfElementLocated(By.id("makePaymentButton"))); 
// Fill out password 
driver.findElement(By.name("password_ccCvv")).sendKeys("999"); 
// Click "Make Payment" button 
driver.findElement(By.id("makePaymentButton")).click(); 
+0

whileループを使用しています。なぜなら、テキストボックスに値を入力した後、私はできませんwhileループ中の3回目または4回目の試行で、私は前進することができます – Apoorve

関連する問題