我们可以将List <webelement>的对象作为参数传递给函数吗?</webelement>

时间:2015-03-19 08:46:31

标签: java java-ee selenium selenium-webdriver

我现在正在自动化一个Web应用程序。我使用了一个列表数组来查找容器中的几个对象。我需要做的是我必须将鼠标悬停到第一个元素并单击相同的元素。但是鼠标悬停方法我在另一个类中编写了常用函数。所以我可以使用list数组的对象以任何方式传递给鼠标悬停方法。?

SCREEN SHOT

查找容器中的元素。

 By by = By.xpath("//ul[@id='sortable']");
 List<WebElement> featureList= element.findElements(by.tagName("a"));


//Mouse-hover method

public static void moveMouseOver(WebDriver driver, By locator) {
        WebElement element = waitForElementPresent(driver, locator);
        (new Actions(driver)).moveToElement(element).build().perform();
    }


Here can I change the 'By Locator' argument to replace with List array object ?

2 个答案:

答案 0 :(得分:2)

您可以尝试将moveMouseOver更改为:

    public static void moveMouseOver(WebDriver driver, WebElement... webElements){
    if(null != webElements){
        for(WebElement webEl : webElements){
           // do something here
         }
      }
     }

然后将其称为

moveMouseOver(driver, ((WebElement[])featureList.toArray()))

请检查是否有语法错误,因为我只在此处写了这个,而没有在IDE中检查

答案 1 :(得分:1)

您可以将方法更改为:

public static void moveMouseOver(WebDriver driver, By locator, String...action) {
    List<WebElement> lstElements = driver.findElements(locator);
    for (WebElement webelement : lstElements){
        if (action.length > 0 && action.equalsIgnoreCase("click"))
            (new Actions(driver)).moveToElement(element).click().build().perform();
        else
            (new Actions(driver)).moveToElement(element).build().perform();
}

在这种情况下,它也适用于单个元素和多个元素,并且您不会被要求在以前的场景中更改使用情况,尽管您将来需要处理不同的情况,因为这个只处理点击。