2016-04-23 10 views
0

Ich schreibe Skript für die Überprüfung der Mobiltelefonnummer von Einmalpasswort (OTP). Während OTP Popup geöffnet ist, kann ich nicht Wert im Textfeld setzen, Fehler zeigt System:Element kann nicht gefunden werden: org.openqa.selenium.NoSuchElementException

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"class name","selector":"opt_success"} Command duration or timeout: 30.04 seconds"

Im Folgenden ist der Code, die ich entworfen habe.

driver.findElement(By.id("phone")).sendKeys(Constants.MOBILE_NUMBER); 
     driver.findElement(By.id("btn_verify")).click(); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
     WebElement otp_value = driver.findElement(By.id("otp")); 
     otp_value.sendKeys("1212121212"); 
     driver.findElement(By.xpath("html/body/div[4]/div/form/div/div[4]/span[1]/input")).click(); 

Webseiten-URL ist: http://talentrack.in/register

+2

Der Fehler ist nicht von Ihrem Code in Frage. Können Sie uns die Zeile zeigen, die 'findElement (by.className (" opt_success ")) aufruft? – Buaban

+0

Buaban hat Recht. Der Code, den Sie angezeigt haben, kann nicht zu dem Fehler führen, den Sie angezeigt haben. Es gibt mehr Code, den Sie haben, zeigen Sie es. Vielen Dank. – alecxe

Antwort

0

You need to correct your Xpath for "OTP text field" as below.

driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@id='otp']")).sendKeys("1212121212"); 

Sie können aber auch 'relative' XPath für Submit-Button statt 'absolute' XPath zu verwenden.

driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@type='submit']")).click(); 
+0

Wirklich hilfreich und es funktioniert gut! Danke Srikanth –

0
WebElement otp_value = driver.findElement(By.id("otp")); 

Das hier ist Ihr Problem. Auf der Seite befinden sich 2 Elemente mit der ID "otp". Du findest die erste, die versteckt ist, aber du brauchst die zweite.

Sie könnten ein WebDriverWait verwenden, um das sichtbare Element zu finden. Ich tue dies in Python wie so:

element = WebDriverWait(driver, 0).until(EC.presence_of_element_located((By.ID, "otp"))) 
return element 

Der Timeout von 0, die den WebDriverWait geführt wird, bedeutet, dass es nur versuchen, und das Element einmal zu finden. Sie können eine Methode erstellen, die dies tut, und ihr einen Timeout-Parameter für die einfache Wiederverwendbarkeit übergeben.

Ich bin sicher, dass es ein Java-Äquivalent dafür gibt. Alternativ können Sie einen anderen Locator verwenden, der für das Element eindeutig ist.

+1

'find_visible_element'? Sind Sie sicher, dass es diese Methode in Python-Selen gibt? :) – alecxe

+0

@alecxe Du hast Recht, das war eine Methode, die ich selbst erstellt habe. Ich habe die Antwort korrigiert, aber ich habe gerade Buabans Kommentar bemerkt, dass der Fehler nicht der Code ist, der angezeigt wird, und er hat Recht. Also denke ich, dass das nicht die richtige Antwort ist. – RemcoW