2013-04-30 91 views
8

编辑:所以我想出了一个简单的方法将鼠标悬停在元素上,但我想等待结果弹出。 Chrome浏览器驱动程序在元素上方移动,移动速度过快,无法看到文本。我怎样才能让它保持徘徊,直到文本弹出为止?我看着Wait()和直到(),但我似乎无法让它们正常工作(我假设这是因为我并不真的在代码中等待布尔值为真,除非有人有一些建议? )。这是我迄今为止...将鼠标悬停在元素上,并等待使用Java的Selenium WebDriver

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

再次感谢大家!

干杯。

+0

您是否收到任何错误?你现在的代码会发生什么?它是如此快速地悬停在它上面,弹出消失? – 2013-04-30 18:25:56

+0

你使用什么浏览器? – acdcjunior 2013-04-30 21:25:09

+0

我正在使用Chrome驱动程序。我得到的错误是该元素无法找到,但我知道我有正确的元素。该命令刚刚超时。不幸的是,我看不到弹出窗口。 – dr4g1116 2013-05-01 15:50:14

回答

6

似乎在这一点上我只是没有等待足够长的时间让文本变得可见。在它的最后添加一个简单的睡眠功能正是我所需要的。

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

    } 
} 

希望能帮助别人在类似的绑定!

干杯!

+0

使用睡眠不好。相反,您可以使用WebDriverWait – 2015-07-30 09:28:38

10

你不能靠睡觉,所以你应该试试这个:

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

你有的是在ExpectedConditions类的方法。

下面是一些信息:

希望对您有所帮助。

+0

确实如此,但对于我的应用程序来说,它运行良好。我将来可能会对此进行检修。非常感谢您的意见! :)我会upvote,如果我可以! – dr4g1116 2013-05-28 14:31:20

+0

@Carlos我有和dr4g1116一样的情况,我的情况是在Chrome中的主菜单上徘徊,并且它移动得太快,我无法点击子菜单。我尝试了“action.moveToElement(mainmenu).perform”和“submenu.waitforpresent()。click();”。但它不适用于Chrome(它适用于Firefox,没有问题)。有什么建议么? – user1559625 2016-03-08 01:14:24

+0

@卡洛斯我有一个链接在http://stackoverflow.com/questions/35855636/why-hover-to-element-and-click-submenu-does-not-work-when-browser-is-opened-full – user1559625 2016-03-08 01:15:19

1

下面是用于鼠标悬停的C#代码。

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

上面的代码基本上使用Actions类的功能MovToElement然后取元件位置(的xpath),并得到它的属性,它也许像(ALT,标题等)并将其存储在一个字符串。稍后将该值与文本进行比较。如果布尔值为true,那么你的测试就是pass。

2

我也有类似问题。

我解决了它。

是的,我想我们可以插入延迟或使用函数,(...),findElements(...)。size(),以获得更好的性能。如果函数的结果不是0,那么我们可以点击或者去除元素。

根据“https://code.google.com/p/selenium/wiki/GettingStarted”和“WebDriver: check if an element exists?”,我们可以插入延迟并使用函数来确定我们想要的元素的存在。

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

等到所需元素显示或时间到了〜!

相关问题