0

Mein Xpath ist korrekt & kein iFrame und ich kann Element in Chrome-Konsole suchen, aber mein Programm schlägt immer noch fehl. Ich habe explizit auch gewartet.Xpath ist richtig, immer noch kein solches Element: Konnte Element nicht finden

Website http://newtours.demoaut.com/ Ich versuche Login-Seite zu finden und Login-ID senden.

Fehlermeldung:

GEFÜHRT: openURL FAILED: loginToTours ** org.openqa.selenium.NoSuchElementException **: ** kein solches Element: Kann Element finden: { "Methode":“ xpath "," selector ":" // input [@ name = 'userName'] "} ** *** Elementinfo: {Using = xpath, value = // input [@ name = 'userName']}
package SeleniumPracticePackage; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
    import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait ; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.List; 
import java.util.Properties; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class CallUrl { 

WebDriver driver; 
Properties prop;  

@BeforeTest 
public void openBrowser() throws IOException 
{ 

// driver = new ChromeDriver(); 

ChromeOptions options = new ChromeOptions(); 
options.addArguments("chrome.switches","--disable-extensions"); 
System.setProperty("webdriver.chrome.driver","C:\\Users\\Ashish\\Documents\\Selenium\\drivers\\chromedriver_win32\\chromedriver.exe"); 
//System.setProperty("webdriver.chrome.driver",(System.getProperty("user.dir") + "//src//test//resources//chromedriver_new.exe")); 
driver = new ChromeDriver(options);  
} 
@Test 
public void openURL() throws IOException 
{ 
//call URL from properties file 
prop = new Properties(); 
FileInputStream urlFile = new FileInputStream("C:\\Users\\Ashish\\Documents\\Selenium\\SeleniumPracticeSite\\src\\URL.properties"); 
prop.load(urlFile); 
driver.get(prop.getProperty("URL")); 
WebDriverWait myDynamicElement = new WebDriverWait(driver,30); 
myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
} 

@Test  
public void loginToTours() throws InterruptedException 
{ 

    driver.findElement(By.xpath("//input[@name='userName']")).click(); 
    //sendKeys(prop.getProperty("login")); 

} 

} 

TestNG XML

<?xml version="1.0" encoding="UTF-8"?> 
    <suite name = "Automation Practice Test"> 
    <test name ="smoke test"> 
     <groups> 
     <run> 
      <include name="Priority2" /> 
     </run> 
     </groups> 
     <classes> 
      <class name ="SeleniumPracticePackage.CallUrl" /> 
     </classes> 
     </test> 
    </suite> 

Webseite HTML-Quellcode

    <tr> 
        <td align="right"><font face="Arial, Helvetica, sans-serif" size="2">User 
        Name: </font></td> 
        <td width="112"> 
        <input type="text" name="userName" size="10"> 
        </td> 
       </tr> 
+0

Ich bin auf der rechten Seite in Ordnung arbeiten werden. Ich habe meinen XPath getestet, sobald Selen die Seite geladen hat. Methode zum Laden der URL ist openURL() ... driver.get (prop.getProperty ("URL")); – Tokci

+0

Welcher XML-Code erzeugt diese Nachricht? –

+0

hinzugefügt xml in der letzten – Tokci

Antwort

1

Das Problem liegt in Ihrem Testcode.

Erläuterung: Sie haben zwei @Test Methoden in Ihrer Testklasse. Einer von ihnen öffnet eine URL und wartet darauf, dass ein Element vorhanden ist und die andere Methode, die nur nach dem Element sucht. Wenn TestNG die Testmethode loginToTours() zuerst ausführt, wird diese Fehlermeldung angezeigt. Standardmäßig führt TestNG Methoden in alphabetischer Reihenfolge aus. Da loginToTours() nicht angibt, in welcher Webseite sich die findElement() befindet, beendet Selen die Ausführung auf einer leeren Seite und Sie sehen die Fehlermeldung. Eine der Fixes wäre loginToTours() Methode abhängig von openURL(), so dass bereits eine gültige Webseite im Browser geöffnet wird, bevor die Suche passiert. [Genau das habe ich auch in meinem aufgeräumten Code getan].

WebDriver ist hier ohne Fehler :)

Hier ist eine aufgeräumt Version Ihrer Testcode, der

public class CallUrl { 
    WebDriver driver; 

    @BeforeClass 
    public void openBrowser() throws IOException { 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("chrome.switches", "--disable-extensions"); 
     driver = new ChromeDriver(options); 
    } 

    @AfterClass 
    public void cleanup() { 
     if (driver != null) { 
      driver.quit(); 
     } 
    } 

    @Test 
    public void openURL() throws IOException { 
     driver.get("http://newtours.demoaut.com/"); 
     WebDriverWait myDynamicElement = new WebDriverWait(driver, 30); 
     myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
    } 

    @Test (dependsOnMethods = "openURL") 
    public void loginToTours() throws InterruptedException { 
     driver.findElement(By.xpath("//input[@name='userName']")).click(); 
    } 

} 
+0

Vielen Dank, für die perfekte Antwort :-) – Tokci

+0

Können Sie bitte meine Antwort akzeptieren, wenn es geholfen hat? –

0

Ihre XPath für einen input Tag suchen, die in Ihrer XML nicht vorhanden ist.

+0

siehe Eingabe Tag – Tokci

+0

Richtig, Sie müssen die ** exakte XML ** angeben, die Sie hier analysieren. Der XML-Code, von dem Sie sagten, dass er analysiert wird, hat kein Eingabe-Tag und das Eingabe-Tag, das Sie einfach zufällig in den Kommentar eingefügt haben, ist nicht Teil des XML in Ihrer Frage. –

+0

Sie suchen nach XML von TestNG oder HTML/CSS-Code der Website verwendet? Der eine, den ich eingefügt habe, ist HTML, der die Website verwendet und xml, das in Frage eingefügt wird, ist TestNG xml ..Ich habe auch den Link auf die Website – Tokci

Verwandte Themen