2013-04-30 65 views
8

EDIT: Vì vậy, tôi đã tìm ra một cách đơn giản để di chuột qua phần tử, nhưng tôi muốn chờ kết quả bật lên. Trình duyệt web Chrome di chuyển qua phần tử và di chuyển quá nhanh để tôi có thể xem văn bản. Làm thế nào tôi có thể giữ nó ở lại cho đến khi văn bản bật lên? Tôi nhìn vào Wait() và cho đến(), nhưng tôi dường như không thể làm cho chúng hoạt động tốt (tôi cho rằng đó là bởi vì tôi không thực sự chờ đợi một boolean là đúng trong mã. Trừ khi ai đó có một số gợi ý?). Dưới đây là những gì tôi có cho đến nay ...Di chuột qua phần tử và đợi với Selenium WebDriver bằng cách sử dụng 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(); 

Cảm ơn mọi người một lần nữa!

Chúc mừng.

+0

Bạn có gặp phải bất kỳ lỗi nào không? Điều gì sẽ xảy ra với mã hiện tại của bạn? Đang lơ lửng trên nó quá nhanh đến nỗi cửa sổ bật lên biến mất? –

+0

Bạn đang sử dụng trình duyệt nào? – acdcjunior

+0

Tôi đang sử dụng trình điều khiển Chrome. Lỗi mà tôi nhận được là không thể tìm thấy phần tử, nhưng tôi biết tôi có phần tử chính xác. Lệnh chỉ ra ngoài. Tôi thấy không có cửa sổ bật lên, thật không may. – dr4g1116

Trả lời

6

Dường như tại thời điểm tôi đã ở phương pháp chỉ không chờ đợi đủ lâu để văn bản hiển thị. Thêm một chức năng ngủ đơn giản vào cuối nó chính xác là những gì tôi cần.

@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) { 

    } 
} 

Hy vọng giúp người khác trong một liên kết tương tự!

Chúc mừng!

+0

Sử dụng giấc ngủ không tốt. Thay vào đó, bạn có thể sử dụng WebDriverWait –

10

Bạn không thể dựa vào ngủ vì vậy bạn nên thử điều này:

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

Bạn có rất nhiều phương pháp trong lớp ExpectedConditions.

Dưới đây là một số thông tin:

Hy vọng bạn tìm thấy điều này hữu ích.

+0

Đúng, nhưng đối với ứng dụng của tôi, nó hoạt động tốt. Tôi có thể đại tu điều này trong tương lai. Cảm ơn bạn rất nhiều cho đầu vào! :) Tôi sẽ upvote này nếu tôi có thể !! – dr4g1116

+0

@Carlos Tôi có tình huống tương tự như dr4g1116, trường hợp của tôi đang di chuột đến menu chính trong Chrome và nó di chuyển quá nhanh để tôi nhấp vào menu phụ. Tôi đã thử "action.moveToElement (mainmenu) .perform", và "submenu.waitforpresent(). Click();". Nhưng nó không hoạt động cho Chrome (nó hoạt động cho Firefox mà không có vấn đề gì). Bất kỳ đề xuất? – user1559625

+0

@Carlos Tôi có một liên kết tại http://stackoverflow.com/questions/35855636/why-hover-to-element-and-click-submenu-does-not-work-when-browser-is-opened-full – user1559625

1

Dưới đây là mã trong C# cho Chuột di chuột.

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"); 
} 

Đoạn mã trên về cơ bản sử dụng hàm MovToElement của lớp Hành động và lấy thuộc tính của phần tử (xpath) và lưu trữ thuộc tính đó trong chuỗi. Sau đó giá trị này được so sánh với văn bản. Nếu giá trị boolean là true thì thử nghiệm của bạn đã qua.

2

Tôi cũng gặp sự cố tương tự với bạn.

Tôi đã giải quyết nó.

Có, tôi nghĩ chúng tôi có thể chèn độ trễ hoặc sử dụng hàm, (...). FindElements (...). Size(), để có hiệu suất tốt hơn. Nếu kết quả của hàm không phải là 0, thì chúng ta có thể nhấp hoặc làm khác với phần tử.

Theo "https://code.google.com/p/selenium/wiki/GettingStarted" và "WebDriver: check if an element exists?", chúng tôi có thể chèn độ trễ và sử dụng hàm để xác định sự tồn tại của phần tử chúng tôi muốn.

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

Đợi đến khi phần tử muốn hiển thị hoặc hết giờ ~!

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