2013-07-19 2 views
5

Der folgende Code prüft eine autocomlete Feld einer Webseite:Wie fülle ich ein Autocomplete-Eingabefeld mit Selenium? (Warum eine automatisierte Eingabe nicht geladen zur automatischen Vervollständigung Optionen, aber eine manuelle Eingabe tut?)

public class Test { 

    public static void main(String[] args) throws InterruptedException { 
     System.setProperty("webdriver.chrome.driver","chromedriver\\chromedriver.exe");  
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://www..............com"); 
     driver.switchTo().frame("mainFrame"); 

     WebDriverWait waitst = new WebDriverWait(driver, 120); 
     waitst.until(ExpectedConditions.visibilityOfElementLocated(By.name("sourceTitle"))); 

     WebElement sourceTitle = driver.findElement(By.name("sourceTitle")); 
     WebElement small = driver.findElement(By.cssSelector("li#nameExampleSection label + small")); 
     sourceTitle.sendKeys("Times"); 
     Thread.sleep(5000); 
     Actions actions = new Actions(driver); 
     actions.click(small).perform(); 

    } 

} 

Warum funktioniert die Autosuggest Box geladen? WICHTIG: versuchen, einzugeben "..........." manuell ... die Autocomplete-Box wird perfekt in Ordnung !!! Also, warum funktioniert nicht cssSelector, warum lädt es nicht die Autocomplete-Box?

Wie kommt es, dass eine automatisierte Eingabe keine Autocomplete-Optionen erlaubt, ABER eine manuelle Eingabe?

PS: Ich habe auch versucht fireEvent, sendKeys aber nichts funktioniert.

+0

Haben Sie versucht, andere Browser ??.Auch warum wartest du auf 0 Sekunden im Web-Treiber warten. – Madusudanan

+0

Vielen Dank für die Antwort. 1) Explizites Warten hat keine Probleme, ich kann '(driver, 120)' verwenden. Die Seite wird geladen. Das Problem tritt auf, wenn "Associated Press, The" in das Eingabefeld gelangt ... Manuell - kein Problem, aber da es dort automatisch abläuft - würde es die Optionen einfach nicht laden. 2) Ich habe auch FireFox ausprobiert - keine Verbesserungen. – Buras

+0

Der Titel war sehr vielversprechend, aber ich sehe nicht, wie die akzeptierte Antwort die Tatsache anspricht, dass sendKeys() die Autocomplete-Dropdown-Liste nicht so erscheinen lässt, als dann dieselbe Texteingabe manuell eingegeben wurde. Und warum haben Sie keine echte URL angegeben, an der Sie das problematische Element untersuchen könnten? –

Antwort

1

Ich habe Ihren Code ausprobiert, es tut genau das, was das Handbuch tut. "Associated Press, The" gibt nur ein "No Match, bitte versuchen Sie Quellen". In Ihrem Code versuchen Sie dann, auf das nächste Formularlistenelement und nicht auf das Ergebnis-Popup zu klicken. Das Auto-Suggest-Popup wird am oberen Rand der HTML-Seite, die sich unter dem Eingabeformular befindet, dynamisch ausgefüllt. Der folgende Code wählt die erste Option in Ihrem Dropdown aus.

@Test 
public void test() throws InterruptedException { 
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://www.lexisnexis.com/hottopics/lnacademic/?verb=sf&sfi=AC00NBGenSrch"); 
     driver.switchTo().frame("mainFrame"); 

     WebDriverWait waitst = new WebDriverWait(driver, 0); 
     waitst.until(ExpectedConditions.visibilityOfElementLocated(By.name("sourceTitle"))); 

     WebElement sourceTitle = driver.findElement(By.name("sourceTitle")); 
     sourceTitle.sendKeys("Times"); 
     Thread.sleep(5000); 
     WebElement firstItem = driver.findElement(By.xpath("//*[@class='auto_suggest']/*[@class='title_item']")); 
     firstItem.click(); 
} 
1

Ich habe eine Abhilfe gefunden. Mein Problem war:

  1. Selen eingegeben ‚Mandaluyong‘ zu einem Auto-vorschlagen Standortfeld
  2. Die Auto-vorschlagen Feld mit dem angepassten Option erscheint zusammen
  3. Dann Selen die Auto-vorschlagen links Dropdown-offen nicht die passende Option auswählen.

Was ich tat, war:

 driver.findElement(By.name("fromLocation")).sendKeys("Mandaluyong"); 
     driver.findElement(By.name("fromLocation")).sendKeys(Keys.TAB); 

Dies liegt daran, auf einen manuellen Test, wenn ich versuche, TAB-Taste zu drücken, zwei Dinge durch das System wurden:

  1. Picks der Passende Option aus dem Drop-down-Menü für automatische Vorschläge
  2. Schließt das Dropdown-Feld für automatische Vorschläge.

Hoffe, das hilft.

0

// Lassen Sie den Autopupationswert das Textfeld ausfüllen.

// 6 Sekunden warten, um sicherzustellen, dass Autowert eingegeben wurde thread.sleep (6000L);

// Auto-Füllwert löschen driver.findElement (By.name ("txtBox")). Clear();

driver.findElement (By.name ("txtBox")). SendKeys ("Wert");

0

Versuchen Sie zuerst, auf das Eingabefeld zu klicken. Dies wird die Dropdown-Box automatisch auffüllen und dann geben Sie den erforderlichen Wert mit sendKeys

+0

Können Sie ein Beispiel geben, wie das geht? – Adam

+0

driver.findElement (By.name ("fromLocation")). Click(); driver.findElement (By.name ("fromLocation")). sendKeys ("XYZABC"); driver.findElement (By.name ("fromLocation")). sendKeys (Keys.TAB); –

Verwandte Themen