0

自動化しようとしているWebアプリケーションには、Webサイトにpingを実行できる診断ツールがあります。これは、テーブル構造を持つボックスに出力を提供します(すべてがi naに含まれています)。

SeleniumWebDriverとJavaを使用して自動化しています。これはJUnit4テストとして構成され、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を使用してこのテキストを解析し、pingが成功した場合はJUnitテストに合格する必要があります(パケットが失われたかどうかは関係ありません)。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();
 }

上記のロジックを使用すると、すべての td タグ データを文字列配列で取得できます。その後、個々の配列要素を要件として解析します。

文字列 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 に答える