0

我试图自动化的 Web 应用程序有一个诊断工具,可以 ping 到一个网站。它在具有表结构的框中提供输出(所有这些都包含在 na 中)。

我正在使用 Selenium WebDriver 和 Java 对其进行自动化编程。它被构造为 JUnit 4 测试并使用 WebDriver(不是 Selenium RC,而是较新的)

这是它的样子:

<tr>
<td style="font-family:Arial;font-size:11px;"></td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;"> </td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">PING ds-any-fp3-real.wa1.b.yahoo.com (98.138.253.109) 56(84) bytes of data.</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=1 ttl=53 time=81.9 ms</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=2 ttl=53 time=148 ms</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=4 ttl=53 time=143 ms</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;"></td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">--- ds-any-fp3-real.wa1.b.yahoo.com ping statistics ---</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">5 packets transmitted, 3 received, 40% packet loss, time 4012ms</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;">rtt min/avg/max/mdev = 81.917/124.763/148.373/30.349 ms</td>
</tr>
<tr>
<td style="font-family:Arial;font-size:11px;"></td>
</tr>
</tbody>

这是它在页面上的样子:

PING ds-any-fp3-real.wa1.b.yahoo.com (98.138.253.109) 56(84) bytes of data.
64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=1 ttl=53 time=81.9 ms
64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=2 ttl=53 time=148 ms
64 bytes from ir1.fp.vip.ne1.yahoo.com (98.138.253.109): icmp_req=4 ttl=53 time=143 ms
--- ds-any-fp3-real.wa1.b.yahoo.com ping statistics ---
5 packets transmitted, 3 received, 40% packet loss, time 4012ms
rtt min/avg/max/mdev = 81.917/124.763/148.373/30.349 ms

我需要使用 Selenium WebDriver 解析此文本并通过 JUnit 测试,如果 ping 成功(无论数据包是否丢失),我还需要提取 IP 地址。

有什么方法可以提取页面源的特定部分(也许,以某种复杂的方式使用 driver.getPageSource() 或通过 xpath 找到这一部分,然后调用 getText()?)然后解析它以获取 IP?我尝试的方式如下:

String IP = "";
String textToParse = //Here, we should have a way to get the string that would contain IP.
String tokenSeparators = "()"; // since our IP is enclosed by brackets 
String tokens[] = textToParse.split(tokenSeparators);
for(int i = 0; i<tokens.length; i++){
    if(tokens[i].matches("^[1-9]?[1-9]?[1-9]?\\.[1-9]?[1-9]?[1-9]?\\.[1-9]?[1-9]?[1-9]?\\.[1-9]?[1-9]?[1-9]?$")){ // IP regexp
         IP = tokens[i]
    }

}

让我知道如何提取我需要解析的文本以及我的代码中是否存在错误(例如,我的正则表达式是否正确)

将不胜感激任何帮助!

4

1 回答 1

2
List<WebElement> allTds=driver.findElements(By.cssSelector("td[style*='font-family:Arial;font-size:11px;']");
String allTdText[]=new String[allTds.size()];
int i=0;
for(WebElement eachTd:allTds)
 {
    allTdText[i++]=eachTd.getText();
 }

通过使用上述逻辑,您将获得 String 数组中的所有 td 标签数据。之后根据您的要求解析每个单独的数组元素。

示例

String a="来自 ir1.fp.vip.ne1.yahoo.com (98.138.253.109) 的 64 字节:icmp_req=1 ttl=53 time=81.9 ms";

仅用于获取 IP 地址

System.out.println(a.substring(a.indexOf("(")+1,a.indexOf(")")));

它将返回98.138.253.109

于 2012-09-26T18:00:16.890 回答