列表

时间:2016-07-11 12:22:01

标签: java selenium selenium-webdriver

我在网页中有一个List WebElements具有特定的高度宽度(我不知道),我想要打印该列表中显示的所有元素。这是我的代码:

public CinemaModule CinemasName() throws InterruptedException
{
    List<WebElement> cinemalist = driver.findElements(By.cssSelector("h4.media-heading"));
    System.out.println("Total cinemas are " + cinemalist.size());
    System.out.println("Cinemas names are:- ");
    for (int i = 0; i < cinemalist.size(); i++)
    {
        System.out.println(cinemalist.get(i).getText());
        return new CinemaModule(driver);
    }
}

这段代码给了我count = 32,但是当我得到文本时,它只打印前4个电影院文本(可以看到),而对于其余的电影院,它打印为空(无文本),因为其余的电影院列表都在滚动。要查看那些电影院名称(WebElement),我们必须滚动。

如何打印所有32个影院的列表?

2 个答案:

答案 0 :(得分:1)

您可以使用JavaScriptExecuter的executeScript()方法将特定元素滚动到视图中,然后使用getText()方法从元素中获取文本。

尝试以下代码,

public CinemaModule CinemasName() throws InterruptedException
{
    List<WebElement> cinemas = driver.findElements(By.cssSelector("h4.media-heading"));
    System.out.println("Total cinemas are " + cinemas.size());
    System.out.println("Cinemas names are:- ");
    JavascriptExecutor jse = (JavascriptExecutor) driver;
    for (WebElement cinema : cinemas)
    {
        jse.executeScript("arguments[0].scrollIntoView(true);", cinema);
        System.out.println("  " + cinema.getText());
    }

    return new CinemaModule(driver);
}

答案 1 :(得分:-1)

如果没有能够看到网站本身,我不确定,但看起来一个大问题是你在循环完成之前从这个函数返回。您在for循环内返回。在for循环后移动它,看看是否能解决问题。

public CinemaModule CinemasName() throws InterruptedException
{
    List<WebElement> cinemalist = driver.findElements(By.cssSelector("h4.media-heading"));
    System.out.println("Total cinemas are " + cinemalist.size());
    System.out.println("Cinemas names are:- ");
    for (int i = 0; i < cinemalist.size(); i++)
    {
        System.out.println(cinemalist.get(i).getText());
    }
    return new CinemaModule(driver);
}

我不知道CinemaModule是什么,但您没有在此功能中设置任何内容,因此我不确定它返回的是什么。如果您所做的只是打印电影院列表,您不应该返回任何内容,这样您就可以将返回类型更改为void ...但我无法看到您的代码,所以也许你需要这个???