硒:将WebElement添加到列表中,然后检查所有元素的可见性

时间:2018-07-18 09:49:23

标签: java selenium selenium-webdriver cucumber

我正在使用Selenium和Cucumber,尝试设置一种通过args存储WebElement的方法。然后使用第二种方法,我试图检查列表中所有元素的可见性。

我通过这种方式定位了一些元素:

 @FindBy(how = How.XPATH, using = "//* 
 [@id=\"content\"]/section/fieldset/form/div[1]/div[2]/input")
 public WebElement formName;
 @FindBy(how = How.CSS, using = "//* 
 [@id=\"content\"]/section/fieldset/form/div[2]/div[2]/input")
 public WebElement formPassword;
 @FindBy(how = How.ID, using = "remember")
 public WebElement rememberMe;
 @FindBy(how = How.CLASS_NAME, using = "button principal")
 public WebElement loginButton;

然后,我编写了此方法以在列表中添加WebElement:

public void crearListaWebElement(WebElement... elements){
    List<WebElement> webElementList = new ArrayList<>();
    for (WebElement element : elements){
        webElementList.add(elements);
    }
}

在.add(elements)1º问题上获得此错误:

  

添加       (java.util.Collection)       清单中的内容无法应用       至       (org.openqa.selenium.WebElement [])

无法弄清楚为什么我不能将这些相同类型的元素添加到列表中

然后,这是检查可见性的第二种方法:

public void estaVisible(WebDriver(tried WebElement as well) visibleWebElements) {

    boolean esvisible =  driver.findElement(visibleWebElements).isDisplayed();
    Assert.assertTrue(esvisible);
    return esvisible;
}

在“ visibleWebElement”上获取此错误:

  WebDriver中的

findElement(org.openqa.selenium.By)无法应用于   (org.openqa.selenium.WebDriver)

我了解两种不同类型的对象之间的冲突,但是,WebDriver找到的对象不是存储为WebElements吗?

请问有人可以在这里放些灯光吗? 提前致谢。

3 个答案:

答案 0 :(得分:1)

当您尝试检查Web元素列表时,必须检查所有元素的可见性。尝试使用以下代码

WebDriver等待Web元素列表

将所有元素存储在列表中

List<WebElement> listOfAllWebElements = new ArrayList<WebElement>();
listOfAllWebElements.add(elementOne);
listOfAllWebElements.add(elementTwo);
listOfAllWebElements.add(elementThree);

WebDriverWait listWait = new WebDriverWait(driver,10);
listWait.until(ExpectedConditions.visibilityOfAllElements(listOfAllWebElements));

WebDriverWait单个Web元素

WebElement element = driver.findElement(By.id("element"));

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOf(element));

答案 1 :(得分:1)

无法弄清楚为什么我不能将这些相同类型的元素添加到列表中-

您的代码中很可能有错字。应该是element而不是elements

for (WebElement element : elements){
        webElementList.add(element);
    }

在“ visibleWebElement”上获取此错误-

driver.findElement()方法接受一个By对象作为参数,它是一个选择器。但是,您正在传递visibleWebElements对象WebElement,这就是为什么您的代码给出错误的原因。例如,如果要通过xpath定位元素,这是使用它的正确方法:

WebElement your_element = driver.findElement(By.xpath("//whatever xpath"));

您可以直接在WebElement上使用isDisplayed()方法:

public void estaVisible(WebElement visibleWebElements) {

    boolean esvisible =  visibleWebElements.isDisplayed();
    Assert.assertTrue(esvisible);
    return esvisible;
}

答案 2 :(得分:0)

此函数将返回一个布尔值,并检查列表元素是否可见。

public boolean isListElementsVisible(WebDriver driver, By locator) {
    boolean result = false;
    try {
        WebDriverWait wait = new WebDriverWait(driver, 30);
        wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator));
        result = true;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        result = false;
    }
   return result;
}