Selenium:无法从类元素中获取文本

时间:2018-03-17 03:33:58

标签: java selenium

我有一个HTML代码:

    <div class="b7bd16b0909896b5">
        <h3 class="ccd4e6086468523f">PastaMania</h3>

这是我的代码:

    List<WebElement> restaurants = 
    driver.findElements(By.className("ccd4e6086468523f"));
            for (WebElement restaurant: restaurants) {
                System.out.println(restaurant.getText());
            }

我想获得文本“PastaMania”,但我不断获得“占位符”。谁知道什么是错的?

更多html代码:outerHTML

1 个答案:

答案 0 :(得分:0)

根据给出的信息,不清楚这个className是否是唯一的,并且@DebanjanB已经声明这个类名可能是动态的,因此将它用作H3元素的定位器并不是一个好主意。

您可以使用以下代码:

driver.findElements(By.xPath("//ol/li//h3"));

可能需要一些明确的等待,直到h3元素可见为止。

我检查了一个C#变种,它给出了正确的结果。在最终的代码中,Thread.Sleep必须被更优雅的等待机制所取代。

结果:

public void TestDeliveroo()
    {
        Driver.Url = "https://deliveroo.com.sg/restaurants/singapore/chinatown?postcode=069535&preselected_tag=1&tags=guilty+pleasures";
        Thread.Sleep(10000);
        IList<IWebElement> restaurants =
            Driver.FindElements(By.XPath("//ol/li//h3"));
        foreach (var restaurant in restaurants)
        {
            Console.WriteLine(restaurant.Text);
        }
    }

给出这个输出:

Potato Head Keong Saik的三个小圆面包 葡萄酒连接奶酪吧 肉史密斯 烤箱炸鸡 两个模糊的人 Fatboy的The Burger Bar BERGS L'EntrecôteTheSteak&amp; Fries Bistro Chir Chir Fusion鸡肉工厂 - 唐人街点 葡萄酒连接店@Chinatown Point Chili's Grill and Bar 商人酒窖 - Duxton 太简单 Flor Patisserie 猫与猫小提琴 哈利 新加坡海峡葡萄酒公司 - UE广场 来自Lucha Loco的GO LOCO 用Poke理论改变自我 Butterknife Folk 苔丝酒吧&amp;厨房 车轮上的Cajun(C.O.W) - 新加坡广场 巴罗莎 Molly Roffey的爱尔兰酒吧 杰克的地方 Wine Connection Bistro Rosso Vino 红尾 Harry的