2013-03-11 11 views
16

Ho usato selenio 2.31.Come eseguire il passaggio del mouse con Selenium WebDriver in Firefox 19?

Ho utilizzato la classe Azioni per il movimento del mouse. Usando questo ho spostato il mouse su un menu e il suo sottomenu è apparso solo per una frazione di secondo a differenza della versione precedente di firefox.

Beacuse di questo problema Non è possibile selezionare il sottomenu utilizzando driver.findElement mentre genera un'eccezione "Impossibile scorrere l'elemento nella vista".

C'è qualche soluzione per questo?

+0

Se possibile, si può dare il link dell'applicazione che si sta testando in modo da poter eseguire il debug del problema? – Hemanth

+0

Che lingua hai usato? Java, C# o cosa? –

risposta

32

Con l'oggetto azioni è necessario prima spostare il titolo del menu, quindi passare alla voce di menu popup e fare clic su di esso. Non dimenticare di chiamare actions.perform() alla fine. Ecco alcuni esempi di codice Java:

Actions actions = new Actions(driver); 
WebElement menuHoverLink = driver.findElement(By.linkText("Menu heading")); 
actions.moveToElement(menuHoverLink); 

WebElement subLink = driver.findElement(By.cssSelector("#headerMenu .subLink")); 
actions.moveToElement(subLink); 
actions.click(); 
actions.perform(); 
+1

questo è quello che mi serviva: ".MoveToElement (menuElement) .Perform()" uguale a ".Hover()" – FrankyHollywood

+1

Esiste un modo per mantenere tale hover per un tempo specifico? Nel mio caso sono in grado di passare il mouse ma il sottomenu poi si nasconde molto rapidamente e quindi il web driver non è in grado di trovare quel sottomenu .. –

+1

@Helping Hands - puoi usare ClickandHold() – Aishu

0

Questa risposta ha aiutato a risolvere il mio problema.

La mia sfida era trovare un collegamento sotto un'opzione di menu. Il collegamento non era visibile finché non passai il mouse sopra il Menu.

Questa parte fondamentale per me è stata scoprire che oltre a passare il mouse sopra il menu, ho dovuto passare il mouse sul collegamento per interagire con esso.

3

Un altro modo per procedere è utilizzare l'Esecutore JavaScript di Selenium per forzare lo stile dell'elemento da visualizzare.

Un esempio di questo sarebbe lungo questa linea in C#

//Use the Browser to change the display of the element to be shown 
(IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('myId').stlye.display="block"); 

//navigate to your link that is now viewable 
driver.FindElement(By.Xpath('//LinkPath')).Click(); 

Da lì, si può trovare il XPath per il vostro elemento e utilizzare il selenio per fare clic sull'elemento. È possibile collegare in cascata questo per trovare i bambini del vostro elemento principale e

//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'"); 

noti che questo è possibile solo se si dispone di un elemento hover che cambia lo stile di visualizzazione quando aleggiava sopra.

2

Prova questo codice ... E 'il codice C sharp ...

//Webelement is the main menu Link 
webElement = driver.FindElement(By.XPath("Your element xpath")); 
Actions act = new Actions(driver); 
     act.MoveToElement(webElement).Perform();//This opens menu list 

     System.Threading.Thread.Sleep(5000);//This line will help you to hold menu 
//This web element is the sub menu which is under main menu 
     webElement = driver.FindElement(By.XPath("Sub menu path")); 
     act.MoveToElement(webElement).Perform();//This opens menu list 
     System.Threading.Thread.Sleep(5000);//Holds menu 
    //This web element is the option you have to click 
     webElement = driver.FindElement(By.XPath("Path")); 
     webElement.Click(); 
+0

Grazie per questo. The act.MoveToElement (webElement).Eseguire(); sul primo menu in alto era fondamentale per il mio caso aprire il menu nascosto. Mi mancava Perform() alla fine e solo MoveToElement (webElement) non era abbastanza. – GlobalCompe

1

Questo sarà utile se si utilizza Ruby.

1.Per prima cosa è necessario trovare l'elemento con xpath o id.

2. Quindi utilizzare il metodo action.move_to(). Perform.

Ecco il codice:

hover = WAIT.until{$driver.find_element(:xpath,"xpath")} 
    driver.action.move_to(hover).perform 
0
List<WebElement> list = driver.findElements(By.xpath("//a")); 
     for (int i=0;i<list.size();i++){ 
     if(list.get(i).getText().equalsIgnoreCase("cacique intimates M")) 
      { 
    new Actions(driver).moveToElement(list.get(i)).click().build().perform(); 
    System.out.println("Clicked on Parent Category"); 
    new Actions(driver).moveToElement(list.get(i)).moveToElement(driver.findElement(By.linkText("SPECIALTY BRAS"))).click().build().perform(); 
     break; 
    }       
    } 
+1

Vuoi spiegarlo? E cosa fa? Che cosa fa in modo diverso rispetto alla risposta accettata esistente. A proposito, "cacique intimates M" da dove viene? Impossibile trovarlo nella domanda. – Rao

Problemi correlati