【问题标题】:nested loop to extract from webelement从 webelement 中提取的嵌套循环
【发布时间】:2015-06-30 14:36:57
【问题描述】:

下面的嵌套循环似乎有问题。我无法弄清楚出了什么问题。你能看看并建议吗?

for (int i = 0; i < headers.size(); i++) {
    for (int j = 0; j < headerlists.size(); j++) {
        System.out.println(hotelid + "|" + headers.get(i).getText() + "|" + headerlists.get(j).getText());
    }
}

输出不符合预期。下面是它打印的输出 -

713374|Basic amenities|WiFi
Air Conditioner
24h Check in
Restaurant
Bar
Cafe
Room Service
Internet
Business Center
Pool
Gym
713374|Basic amenities|Air Conditioning
Doorman
Express Check-In
Express Check-Out
Housekeeping
Banquet Facility
Doctor on Call
713374|Basic amenities|Air Conditioning
Doorman
Express Check-In
Express Check-Out
Housekeeping
Banquet Facility
Doctor on Call

已编辑 - 我的期望:

713374|Basic amenities|WiFi 713374|Basic amenities|Air Conditioner 713374|Basic amenities|24h Check in 713374|Basic amenities|Restaurant 713374|Basic amenities|Bar 713374|Basic amenities|Cafe 713374|Basic amenities|Room Service 713374|Basic amenities|Internet 713374|Basic amenities|Business Center 713374|Basic amenities|Pool 713374|Basic amenities|Gym

【问题讨论】:

  • 究竟有什么问题?
  • 你看到我的 println 是什么了吗?
  • 您需要向我们展示更多代码,我们在该代码中看不到任何问题,除非标题列表包含换行符

标签: java loops selenium nested


【解决方案1】:

按照您在 cmets 中的预期输出,headerLists 的数据包含意外的换行符!selenium 代码看起来不错。从您的 cmets 中,您基本上说 headerLists 输出了太多信息。

再次,由于意外的换行,我们希望处理 headerLists 的每个节点中每个换行的每一位数据,因此让我们将每个换行拆分为一个数组,以便我们更好地处理它。

将 headerList.get(j).getText() 视为多行文本,使用以下循环分隔换行符并利用每个单独的 NewlineData 用于每个便利设施。

for(String NewlineData : headerLists.get(j).getText().split("\\n"))
    System.out.printf(Hotelid + NewlineData + " | "); 
}

之前

“空调
电视
浴室
等”

之后

“71000空调|71000电视|71000卫浴|71000等”

您可以使用 split 来分隔字符分隔的字符串。将带有换行符的 headerLists 分解为字符串数组。并重新打印字符串数组中的每个节点以及酒店ID。

上面带有 split 方法的 forloop 是您的关键,显然重新排列您的输出以匹配预期,您可能不想打印 71000 TV | 71000 浴室等

【讨论】:

  • 应该是评论。
  • 对!我的硒代码没有任何问题。完美的工作......我的输出需要是两个循环的组合......但是这没有发生,,,
  • 以下是我所期待的...713374|基本设施|WiFi 713374|基本设施|空调 713374|基本设施|24 小时入住 713374|基本设施|餐厅 713374|基本设施|酒吧 713374|基础设施|咖啡厅 713374|基础设施|客房服务 713374|基础设施|网络 713374|基础设施|商务中心 713374|基础设施|游泳池 713374|基础设施|健身房
【解决方案2】:

似乎headerlists.get(j).getText() 包含new line

您可以使用 -->

删除它们
replaceAll("\n"," ")); //repalces all new lines with a empty space

你的代码应该是这样的:

for (int i = 0; i < headers.size(); i++) {
    for (int j = 0; j < headerlists.size(); j++) {
        System.out.println(hotelid + "|" + headers.get(i).getText() + "|" + headerlists.get(j).getText().replaceAll("\n"," ");
    }
}

【讨论】:

  • 你所代表的那段代码(假设没有其他线程正在运行)不会这样做,除非有新行
  • 你也可以检查 headerlists 的大小,我相信所有记录的大小都是 1
  • 是的,我认为我的标题列表有问题。如果我发现其中有任何问题,我会及时通知你们...非常感谢
  • 嗨,纳法斯,你是对的。 headerlists 的大小为 1。为什么会这样?虽然在网络上,列表没有合并......理想情况下它应该在不同的索引中......任何想法?下面是它在网络上的样子......
  • div class="col col8">

    Hotel Royal Heritage-距离阿布山设施 30 公里

    基本设施

猜你喜欢
  • 2020-05-18
  • 2015-04-22
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
相关资源
最近更新 更多