2013-04-30 10 views
8

EDIT: So habe ich eine einfache Möglichkeit gefunden, über das Element zu fahren, aber ich möchte auf ein Ergebnis warten. Der Chrome-Webtreiber bewegt sich über das Element und bewegt sich zu schnell, um Text sehen zu können. Wie kann ich erreichen, dass es solange bleibt, bis der Text erscheint? Ich schaute auf Wait() und bis(), aber ich kann nicht scheinen, dass sie richtig funktionieren (ich nehme an, dass ich nicht wirklich darauf warte, dass ein Boolscher im Code wahr ist. Es sei denn, jemand hat ein paar Vorschläge?). Hier ist, was ich bis jetzt habe ...Bewegen Sie den Mauszeiger über das Element und warten Sie mit Selenium WebDriver unter Verwendung von Java

WebDriver driver = getWebDriver(); 
By by = By.xpath("//*[@pageid='" + menuItem + "']"); 
Actions action = new Actions(driver); 
WebElement elem = driver.findElement(by); 
action.moveToElement(elem); 
action.perform(); 

Danke wieder jeder!

Prost.

+0

Erhalten Sie irgendwelche Fehler? Was passiert mit deinem aktuellen Code? Schwebt es so schnell darüber, dass das Pop-up verschwindet? –

+0

Welchen Browser benutzen Sie? – acdcjunior

+0

Ich verwende den Chrome-Treiber. Der Fehler, den ich bekomme, ist, dass das Element nicht gefunden werden kann, aber ich weiß, dass ich das richtige Element habe. Der Befehl läuft gerade ab. Ich sehe leider kein Popup. – dr4g1116

Antwort

6

Scheint an dem Punkt, an dem ich bei der Methode war, habe ich nicht lange genug gewartet, bis der Text sichtbar wurde. Das Hinzufügen einer einfachen Schlaffunktion am Ende war genau das, was ich brauchte.

@When("^I hover over menu item \"(.*)\"$") 
public void I_hover_over_menu_item(String menuItem) 
{ 
    WebDriver driver = getWebDriver(); 
    By by = By.xpath("//*[@pageid='" + menuItem + "']"); 
    Actions action = new Actions(driver); 
    WebElement elem = driver.findElement(by); 
    action.moveToElement(elem); 
    action.perform(); 
    this.sleep(2); 
} 

public void sleep(int seconds) 
{ 
    try { 
     Thread.sleep(seconds * 1000); 
    } catch (InterruptedException e) { 

    } 
} 

Hoffe, dass hilft anderen in einer ähnlichen Bindung!

Prost!

+0

Schlaf ist nicht gut. Stattdessen können Sie WebDriverWait verwenden –

10

Sie können nicht auf Betten verlassen, so dass Sie diese versuchen sollten:

WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

Sie haben eine viel Methoden in der ExpectedConditions Klasse. Hier

einige Informationen:

Hoffe, dass Sie dies nützlich finden.

+0

True, aber für meine Anwendung funktioniert es gut. Ich könnte das in Zukunft überarbeiten. Vielen Dank für die Eingabe! :) Ich würde dies erhöhen, wenn ich könnte !! – dr4g1116

+0

@Carlos Ich habe die gleiche Situation wie dr4g1116, mein Fall schwebt auf ein Hauptmenü in Chrome, und es geht zu schnell für mich auf das Untermenü klicken. Ich habe versucht "action.moveToElement (mainmenu) .perform" und "submenu.waitforpresent(). Click();". Aber es funktioniert nicht für Chrome (es funktioniert für Firefox ohne Probleme). Irgendwelche Vorschläge? – user1559625

+0

@Carlos Ich habe einen Link unter http://stackoverflow.com/questions/35855636/why-hover-to-element-and-click-submenu-does-not-work-when-browser-is-opened-full – user1559625

1

Unten ist Code in C# für Mouse Hover.

Actions mousehover = new Actions(driver); 
IWebElement Element_Loc = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]")); 
mousehover.MoveToElement(Element_Loc).Build().Perform(); 
string Mouse_Text = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]")).GetAttribute("alt"); 

Boolean booltext = Mouse_Text.Equals("your mousehover text goes here."); 
Console.WriteLine(booltext); 

if (booltext.Equals(true)) 
{ 
    Console.WriteLine("The text is verified and matches expected"); 
} 
else 
{ 
    throw new Exception(" The text does not match the expected"); 
} 

Der obige Code verwendet grundsätzlich die Funktion MovToElement der Klasse Aktionen und nimmt dann die Elementstelle (XPath) und erhält seine Eigenschaft, die vielleicht wie (alt, Titel etc.) und speichert sie in einem String. Später wird dieser Wert mit dem Text verglichen. Wenn der boolesche Wert wahr ist, ist Ihr Test bestanden.

2

Ich habe auch ein ähnliches Problem mit Ihnen.

Ich habe es gelöst.

Ja, ich denke, wir können Verzögerung einfügen oder verwenden Sie eine Funktion, (...). FindElements (...). Size(), für eine bessere Leistung. Wenn das Ergebnis der Funktion nicht 0 ist, können wir auf das Element klicken oder sonstwie tun.

Laut "https://code.google.com/p/selenium/wiki/GettingStarted" und "WebDriver: check if an element exists?" können wir eine Verzögerung einfügen und die Funktion verwenden, um die Existenz des gewünschten Elements zu bestimmen.

// Sleep until the div we want is visible or 5 seconds is over 
    long end = System.currentTimeMillis() + 5000; 
    while (System.currentTimeMillis() < end) { 
     List<WebElement> elements = driver.findElements(By.id("btn")); 

     // If results have been returned, the results are displayed in a drop down. 
     if (elements.size() != 0) { 
      driver.findElement(By.id("btn")).click(); 
      break; 
     } 
    } 

Warten Sie, bis das gewünschte Element angezeigt wird oder die Zeit abgelaufen ist ~!

Verwandte Themen