2017-05-28 5 views
1

Beobachten folgenden Fehler während der Ausführung meines Testskripts. Kann mir jemand helfen, die Ursache des Scheiterns zu erkennen? HierNoSuchElementException beim Ausführen meines Testscript

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

ist der Ausschnitt aus meinem Code. Bitte beachten Sie, dass das Element in demselben Frame vorhanden ist, daher wird Frame-Switch nicht benötigt.

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-Ansicht des Elements:

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

Haben Sie versucht, 'driver.findElement (By.id (" lid ") zu verpacken. SendKeys (" [email protected] ");' Anweisung in einem 'expliziten wait'? Fügen Sie auch das Login-Formular HTML hinzu, sonst werden die Leute es schwer haben, Ihnen zu helfen. Was ich tun würde, ist die Browser-Konsole zu öffnen und zu sehen, welcher Selektor die Eingabe mit '.val()' füllt. (Beispiel: '$ ('# lid'). val (" [email protected] ")'). Wenn es mit der Konsole JQuery funktioniert, funktioniert es mit Ihren Selektoren. :) – iamdanchiv

+0

Ich habe bereits versucht, diese Anweisung mit expliziten warten, aber es hat nicht funktioniert. – Dks

+0

@Dks hast du meine Lösung versucht? –

Antwort

0

Ich habe die Webseite „https://www.zoho.com/crm/lp/login.html“ inspiziert und ich bin in der Lage ein iframe in diesem und den Eingabetextfelder im Inneren zu sehen sind. Unten ist der Arbeitscode.

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(); 
} 

Hoffe das hilft Ihnen. Vielen Dank.

+0

Ja, dieser Code funktioniert für mich. – Dks

+0

Danke für die Gunst. – Dks

0

Hier ist die Antwort auf Ihre Frage:

Ein paar Worte über die Lösung:

  1. Während mit Selen 3.4.0 mit geckodriver v0.16.1 & Mozilla Firefox 53.0 arbeiten müssen Sie die zum Download neuste geckodriver von here und stellen Sie den absoluten Pfad des geckodriver durch System.setProperty.
  2. Versuchen Sie zu vermeiden, implicitlyWait nach aktuellen Updates implicitlyWait kann bald im Feuer sterben.
  3. Der Fehler, den Sie sehen NoSuchElementException sagt alles. Die id des Elements ist nicht rückverfolgbar.
  4. Das Element mit der ID lid befindet sich in einem Iframe, Sie müssen also zuerst zum Rahmen wechseln.
  5. Hier ist Ihr eigener Code mit einigen einfachen Optimierungen drin:

    @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]"); 
    
    
    } 
    

Lassen Sie mich wissen, ob dies Ihre Frage beantwortet.

+0

Ja, ich habe meinen Code verwendet, indem ich zum Frame gewechselt habe, jetzt funktioniert es. Danke – Dks

+0

@Dks Klingt gut !!! Wenn meine Antwort auf Ihre Frage eingegangen ist, können Sie die Antwort als Lösung akzeptieren? Vielen Dank – DebanjanB

Verwandte Themen