2017-05-28 5 views
1

テストスクリプトの実行中に次のエラーが発生しました。誰かが失敗の原因を特定するのを助けることができますか?テストスクリプトの実行中にNoSuchElementExceptionが発生しました

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"lid"} 
Command duration or timeout: 20.45 seconds 

ここに私のコードのスニペットがあります。要素が同じフレームに存在し、フレーム切り替えが不要であることに注意してください。要素の

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
//import org.openqa.selenium.support.ui.ExpectedConditions; 
//import org.openqa.selenium.support.ui.WebDriverWait; 
import org.testng.annotations.Test; 

public class LoginPage 
{ 
    @Test 
    public void testLoginFail() 
    { 
     WebDriver driver = new FirefoxDriver(); 
     driver.get("https://www.zoho.com/crm/"); 
     driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
     driver.findElement(By.linkText("LOGIN")).click(); 
     //WebDriverWait wait = new WebDriverWait(driver,40); 
     //wait.until(ExpectedConditions.visibilityOfElementLocated((By.id("lid")))); 
     driver.findElement(By.id("lid")).sendKeys("[email protected]"); 

HTMLビューには、次のとおりです。

<input name="lid" id="lid" class="input usrbx" value="" onkeypress="clearmsg()" type="email"> 
+1

''明示的待機 'の '' driver.findElement(By.id( "lid"))のsendKeys( "[email protected]"); 'ステートメントをラッピングしようとしましたか?また、ログインフォームHTMLを添付してください。人々はあなたを助けてくれるでしょう。私がやることは、ブラウザのコンソールを開いて、セレクタが '.val()'で入力を埋めているかどうかを調べることです。 (例: '$( '#lid').val(" [email protected] "))。コンソールJQueryで動作する場合は、セレクタで動作します。 :) – iamdanchiv

+0

私はすでに明示的にこのステートメントをラップしようとしましたが、うまくいきませんでした。 – Dks

+0

@Dksあなたは私のソリューションを試しましたか? –

答えて

0

は、私がWebページ「https://www.zoho.com/crm/lp/login.html」を点検していると私はそれの内側にあることと、入力されたテキストボックスにはiframeを見ることができています。以下は作業コードです。

public static void main(String[] args) 
{ 

    System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\Selenium\\Web Drivers\\chromedriver.exe"); 
    WebDriver driver=new ChromeDriver(); 


    driver.get("https://www.zoho.com/crm/"); 
    driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
    driver.findElement(By.linkText("LOGIN")).click(); 

    //Switch to the frame 
    driver.switchTo().frame(0); 
    driver.findElement(By.id("lid")).sendKeys("[email protected]"); 
    driver.quit(); 
} 

希望します。ありがとう。ここで

+0

はい、このコードは私のために働きます。 – Dks

+0

ありがとうございました。 – Dks

0

は、あなたの質問への答えです:

ソリューションに関するいくつかの単語:

  1. はgeckodriverのv0.16.1でセレン3.4.0で& Mozilla Firefoxの53.0を作業中にダウンロードする必要があります最新のgeckodriverをhereから取得し、geckodriverの絶対パスをSystem.setPropertyに入力します。
  2. implicitlyWait最近更新されたものとしてimplicitlyWaitがすぐに死亡する可能性があります。
  3. あなたが見ているエラーNoSuchElementExceptionはそれをすべて言います。要素のidは追跡可能ではありません。
  4. idがlidの要素がiframe内にあるため、最初にフレームに切り替える必要があります。

    @Test 
    public void testLoginFail() 
    { 
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); 
        WebDriver driver = new FirefoxDriver(); 
        driver.get("https://www.zoho.com/crm/"); 
        driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
        driver.findElement(By.linkText("LOGIN")).click(); 
        driver.switchTo().frame("zohoiam"); 
        driver.findElement(By.xpath("//input[@id='lid']")).sendKeys("[email protected]"); 
    
    
    } 
    

これは、あなたの質問に答えるならば、私に教えてください:ここで

  • はそれでいくつかの簡単な心痛を使用して独自のコードがあります。

  • +0

    はい、フレームに切り替えることでコードを使用しましたが、現在は機能しています。おかげで – Dks

    +0

    @Dksは素晴らしいサウンド!あなたの質問に私の答えがあった場合、解決策として回答を受け入れることができますか?ありがとう – DebanjanB

    関連する問題