3

我想在http://www.redbus.in/Booking/SelectBus.aspx?fromCityId=中获取标签中存在的所有 Travels 名称的名称(它们是动态的,因此想要在数组中进行计数)124&fromCityName=海得拉巴&toCityId=462&toCityName=孟买&doj=30-May-2013&busType=Any&opId=0

这是html文件的一部分

<div id="t1-results">
<table id="t1-list5" class="list5" cellspacing="0" cellpadding="0" style="margin-top:0px;">
 <tbody id="t1-0">
 <tr class="r1">
 <td class="i1">Akbar Travels</td>
 <td class="i2">
 <td class="i3">
 <td class="i4">
 <td class="i5">
 <td class="i6">
 <td class="i7">
  </tr>
 <tr class="r2">
 <tr class="r3">
 </tbody>
 <tbody class="hrblank">
 <tbody id="t1-1" class="G">
 <tr class="r1">
 <td class="i1">Omer Travels</td>
 <td class="i2">
 <td class="i3">
 <td class="i4">
 <td class="i5">
 <td class="i6">
 <td class="i7">
 </tr>
 <tr class="r2">
 <tr class="r3">
 </tbody>
 <tbody class="hrblank">
 <tbody id="t1-2">
 <tr class="r1">
 <td class="i1">Sangita Travel Agency</td>
 <td class="i2">
 <td class="i3">
 <td class="i4">
 <td class="i5">
 <td class="i6">
 <td class="i7">
 </tr>

我试过了

        List<WebElement> linkElements = driver.findElements(By.tagName("//table[@cellspacing=\"0\"]"));

        String[] linkTexts = new String[linkElements.size()];

当我调试时linkElements ArrayList<E> (id=82)
linkTexts String[0] (id=95)

不工作。

也试过这个

List<WebElement> linkElements = driver.findElements(By.tagName("t1-results"));

        String[] linkTexts = new String[linkElements.size()];

谁能建议我如何取名字。

4

4 回答 4

2

尝试使用 CSS 选择器,如下所示:

List<WebElement> linkElements = driver.findElements(By.cssSelector("table tr.r1 > td.i1")); 

我刚刚做了一个快速测试,这段代码找到了所有 63 个匹配项(在撰写本文时):

driver.get("http://www.redbus.in/Booking/SelectBus.aspx?fromCityId=124&fromCityName=Hyderabad&toCityId=462&toCityName=Mumbai&doj=30-May-2013&busType=Any&opId=0");

//Find's the elements using a CSS selector: all td's (with class "i1"), directly inside a tr (with class r1) which are inside a table.
List<WebElement> linkElements = driver.findElements(By.cssSelector("table tr.r1 > td.i1"));
String[] linksText = new String[linkElements.size()];
int index = 0;
for(WebElement element : linkElements){
    linksText[index++] = element.getText();
}
于 2013-05-29T03:22:16.233 回答
0

Xpath 也是不错的选择,使用这个希望对你有所帮助。

List<WebElement> linkElements = driver.findElements(By.Xpath("Your Xpath"));
String[] linksText = new String[linkElements.size()];
int index = 0;
for(WebElement element : linkElements){  
linksText[index++] = element.getText();
}
于 2013-05-29T04:57:48.180 回答
0

尝试使用下面给出的 CSS 计数概念

int size=driver.findElements(By.cssSelector("#t1-results > #t1-list5 > tbody > tr.r1")).size();
for(int i=1;i<=size();i++)
{
    String travelname = driver.findElement(By.cssSelector("#t1-results > #t1-list5 > tbody > tr.r1 > td.i1"))
}

让我知道上面的脚本是否适合您。

于 2014-04-08T08:02:35.593 回答
0

CSS 和 XPath 条目都可用于解决此类问题,但需要进行一些说明:

  1. 一些 CSS 条目与经常更改的样式功能相关,不应用作定位器,
  2. 将 XPath 定位器整体描述为“脆弱”可以追溯到过去,当时该术语暗示父级 /html 和正在寻找的最终小部件之间的完整 DOM 路径。

有一些用于构建 XPath 定位器的算法,这些算法首先被设计为根据频繁/大规模的 DOM 重组而变得健壮——这样的定位器绝不是脆弱的。

前面提到的最后一个问题(有些浏览器 [特别是 IE] 具有非标准的 XPath 实现)很遗憾是正确的,无论您对 XPath 的一般价值的看法如何。

这不是放弃将 XPath 作为工具包的工具的理由——但它可能会让人相信放弃具有如此多专有特性的浏览器。

于 2015-07-22T19:27:21.907 回答