2016-10-22 4 views
0

Ich versuche eine Website mit verschiedenen metrischen Systemen zu automatisieren. Die Anwendung unterstützt sowohl das amerikanische metrische System & britischen metrischen System. Für Beispiel: Wenn ich die Anwendung von einem amerikanischen Server öffne, sehe ich die Textfelder für Füße & Zoll, & Wenn ich die gleiche Anwendung von einem anderen Server öffne, sehe ich die Textfelder in Zentimeter.Element kann nicht gefunden werden - Eine Website mit selen webdriver in verschiedenen Gebietsschemas automatisieren

ich meinen Code geschrieben haben, so dass es zuerst überprüft, ob ein Textelement mit Füßen & Zoll vorhanden ist, wenn es vorhanden ist, dann geht es vor & Werte in den Textfeldern eintritt, sonst, wenn Feet & Inches nicht vorhanden ist Geben Sie dann die Werte in das Textfeld Zentimeter ein.

/* 
* 
* This block is for the values in US version 
* 
*/ 
@FindBy(xpath = ".//*[@id='profile_height_large_value']") 
WebElement CurrentHeightinFeet; 

@FindBy(xpath = ".//*[@id='profile_height_small_value']") 
WebElement CurrentHeightinInches; 

/* 
* This block is for the values in British version 
* 
*/ 

@FindBy(xpath = ".//*[@id='profile_height_display_value']") 
WebElement CurrentHeightinCM; 

Und mein Code zu überprüfen, ob es in jeder Version wie folgt ist.

public void userFitnessDetails() { 
    CurrentWeight.sendKeys("70"); 

    if (CurrentHeightinFeet.isDisplayed()) { 
     CurrentHeightinFeet.clear(); 
     CurrentHeightinFeet.sendKeys("5"); 
     CurrentHeightinInches.clear(); 
     CurrentHeightinInches.sendKeys("10"); 
    } 

    CurrentHeightinCM.clear(); 
    CurrentHeightinCM.sendKeys("170"); 
} 

Wenn ich den obigen Code ausführen bekomme ich einen Fehler - FAILED: Anmelden org.openqa.selenium.NoSuchElementException: Kann Element suchen:

{"method":"xpath","selector":".//*[@id='profile_height_large_value']"} 

Könnte jemand mich leiten, dies zu korrigieren ?

Dank

Antwort

1

Annahmen - Sie sind auf einem britischen Server arbeiten und mit den amerikanischen Füße Länge Eingänge in Probleme laufen. Die Seite ist vollständig geladen und die Elemente sind vollständig verfügbar, Warteprobleme sind nicht vorhanden.

Sie werden auf Probleme mit der isDisplayed() Methode stoßen. Es wird verwendet, um herauszufinden, ob ein Element, das auf der Seite vorhanden ist, nicht sichtbar ist oder umgekehrt, aufgrund der Einstellung der Anzeige des Stilattributs. Hier haben Sie je nach Serverstandort erwähnt, ob die relevanten HTML-Elemente vorhanden sind oder nicht. Wenn das Element nicht verfügbar ist, wird die Ausnahme angezeigt.

Sie können die sicherere driver.findElements() anstelle der isDiplayed() Bedingungsprüfung verwenden, die eine Liste zurückgibt, und Sie können die Größe überprüfen, um die Verfügbarkeit zu ermitteln.

+0

Ich habe meinen Code wie auf Ihren Vorschlag geändert, aber ich habe Probleme in meinem Zustand zu überprüfen. – AdiBoy

+0

@FindBy (xpath = ".//**@@id = 'profile_height_display_value']")) \t WebElement CurrentHeigtinCM; \t @FindAll (@FindBy (id = "profile_goal_weight_display_value")) \t WebElement GoalWeight; Auch in meiner Zustandsprüfung verwende ich if (CurrentHeightinFeet.size()> 0 && CurrentHeightinInches.size()> 0) { \t \t \t CurrentHeightinFeet.clear(); \t \t \t CurrentHeightinFeet.sendKeys ("5"); \t \t \t CurrentHeightinInches.clear(); \t \t \t CurrentHeightinInches.SendKeys ("10"); \t \t} "Die Methode sendKeys (String) ist nicht definiert für den Typ Liste " – AdiBoy

+1

Sie können sendKeys nicht in einer Liste aufrufen, die die WebElements enthält. Wenn die Listengröße größer als 0 ist, ist Ihre Bedingung erfüllt.Das gesuchte Element muss aus der Liste extrahiert werden. Verwenden Sie die Methode get (0) in der Liste, um das WebElement abzurufen. Verwenden Sie dann die sendKeys-Methode. – Grasshopper

Verwandte Themen