2013-03-11 41 views
16

Tôi đã sử dụng selenium 2.31.Cách di chuột qua Selenium WebDriver trong Firefox 19?

Tôi đã sử dụng Lớp hành động để di chuyển chuột. Sử dụng điều này tôi di chuyển chuột qua một menu và menu phụ của nó xuất hiện chỉ trong một phần nhỏ của giây không giống như phiên bản cũ của firefox.

Beacuse của vấn đề này tôi không thể chọn menu phụ sử dụng driver.findElement vì nó ném một ngoại lệ "phần tử không thể được cuộn vào xem".

Có giải pháp nào cho vấn đề này không?

+0

Nếu có thể, bạn có thể cung cấp cho các liên kết của các ứng dụng mà bạn đang thử nghiệm để chúng tôi có thể gỡ lỗi vấn đề này? – Hemanth

+0

Bạn đã sử dụng ngôn ngữ nào? Java, C# hoặc cái gì? –

Trả lời

32

Với đối tượng tác vụ, trước tiên bạn nên di chuyển tiêu đề menu, sau đó di chuyển đến mục menu bật lên và nhấp vào nó. Đừng quên gọi actions.perform() ở cuối. Dưới đây là một số mã Java mẫu:

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

đó là những gì tôi cần: ".MoveToElement (menuElement) .Perform()" bằng ".Hover()" – FrankyHollywood

+1

Có cách nào mà tôi có thể giữ di chuột cho thời gian cụ thể không? Trong trường hợp của tôi, tôi có thể di chuột nhưng menu con sau đó ẩn rất nhanh và sau đó trình điều khiển web không thể tìm thấy menu con đó. –

+1

@ Trợ giúp Hands - bạn có thể sử dụng ClickandHold() – Aishu

0

Câu trả lời này đã giúp giải quyết vấn đề của tôi.

Challange của tôi là tìm liên kết bên dưới tùy chọn menu. Liên kết không hiển thị cho đến khi tôi di chuột qua Menu.

Phần quan trọng này đối với tôi là tìm ra rằng ngoài việc lơ lửng trên menu, tôi tiếp theo đã di chuột lên liên kết để tương tác với nó.

3

Một cách khác để thực hiện việc này là sử dụng Trình thực thi JavaScript của Selenium để buộc kiểu dáng của phần tử được hiển thị.

Một ví dụ về điều này sẽ là dọc theo các đường này trong 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(); 

Từ đó, bạn có thể tìm thấy những yếu tố XPath để bạn và sử dụng selen bấm vào phần tử. Bạn có thể xếp thứ tự này để tìm con của phần tử chính của bạn cũng như

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

Lưu ý rằng điều này chỉ có thể nếu bạn có phần tử di chuột thay đổi kiểu hiển thị khi di chuột qua.

2

Hãy thử mã này ... Đó là c mã sắc nét ...

//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

Cảm ơn vì điều này. Act.MoveToElement (webElement).Biểu diễn(); trên menu trên cùng đầu tiên là rất quan trọng cho trường hợp của tôi để mở menu ẩn. Tôi đã mất Perform() ở cuối và chỉ MoveToElement (webElement) là không đủ. – GlobalCompe

1

này sẽ rất hữu ích nếu bạn đang sử dụng Ruby.

1. Trước tiên, bạn cần phải tìm phần tử bằng xpath hoặc id.

2.Sử dụng phương thức action.move_to().

Đây là mã:

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

Bạn sẽ muốn giải thích nó? Và nó làm gì? Nó làm gì khác với câu trả lời được chấp nhận hiện tại. Nhân tiện, "cacique intimates M" nó đến từ đâu? Không thể tìm thấy câu hỏi trong câu hỏi. – Rao

Các vấn đề liên quan