JAVAにてseleniumDriver を使用 XMLにテストシナリオ(Xpathにて)を記述して実行したが、Syntaxエラー

1,594 views
Skip to first unread message

弘田哲央

unread,
Dec 6, 2016, 4:00:47 AM12/6/16
to 日本Seleniumユーザーコミュニティ
■質問内容
seleniumとは直接関係ないかもしれませんが、
テストシナリオの利便性のため、XMLにxpathにてテストシナリオを記述し、JAVAのパーサにて
拾いにいくというコーディングをしたのですが、下記のエラーが発生しております。

Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression //*[@id=\"categoryHead_mech\"]/a because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[@id=\"categoryHead_mech\"]/a' is not a valid XPath expression.

普通に下記のとおり書けば、問題なく実行されます。

driver.findElement(By.xpath("//*[@id=\"categoryHead_mech\"]/a")).click();

XMLの記述形式がおかしいのか、それとも、セレニウム側の問題なのか、分からない状況です。
解消方法について、ご教示お願いできないでしょうか?


■読み込むXMLは下記のとおりです。



<?xml version="1.0" encoding="UTF-8"?>
<testcase1>
<shinario1>/html/body/div[1]/div[2]/div/div[7]/h2</shinario1>
<shinario2>//*[@id=\"categoryHead_mech\"]/a</shinario2>
</testcase1>


■JAVA側は抜粋すると
    private void tracenode(Node node){

     Node child = node.getFirstChild();

     while(child != null){

      printTextNode(child);

      tracenode(child);

      child = child.getNextSibling();

     }
    }

    public void printTextNode(Node node){

     if(node.getChildNodes().getLength() == 1){
      String ch = "";
      ch  = node.getTextContent();
         System.out.println("ノードの値:" + ch);
      driver.findElement(By.xpath(ch)).click();

     }

    }

になります。

宜しくお願い致します。

伊藤望

unread,
Dec 6, 2016, 6:19:03 AM12/6/16
to 日本Seleniumユーザーコミュニティ
伊藤です。

Javaの文字列の中に"を含める時は\"のように書く必要がありますが、
xpathやXML中に書く時はいらないのではと思います。

読み込むXMLを
<shinario2>//*[@id="categoryHead_mech"]/a</shinario2>
のように書き換えたら動かないでしょうか。

弘田哲央

unread,
Dec 6, 2016, 8:11:25 PM12/6/16
to 日本Seleniumユーザーコミュニティ
伊藤様

お世話になります。

下記のコードでも試してみましたが、やはりだめでした。
他にも&amp;で置き換えにも試してみても、同じでダメでした。

弘田

2016年12月6日火曜日 20時19分03秒 UTC+9 伊藤望:

伊藤望

unread,
Dec 7, 2016, 11:00:11 AM12/7/16
to 日本Seleniumユーザーコミュニティ
弘田さん

うーん、そうなんですね。ダブルクオート以外は、見た感じ問題なさそうなXPathです。


<shinario2>//*[@id=\"categoryHead_mech\"]/a</shinario2>
<shinario2>//*[@id='categoryHead_mech']/a</shinario2>
のようにシングルクオートにしたら、もしかしたら動くかもしれません。

ちなみにブラウザは何でしょうか。XPathの解析エンジンがブラウザによって微妙に異なるので。

弘田哲央

unread,
Dec 7, 2016, 7:49:51 PM12/7/16
to 日本Seleniumユーザーコミュニティ
伊藤様

お世話になります。

たびたびのご返答ありがとうございます。

ブラウザはChromeになります。
シングルくオートにしてもやはり、エラー内容は異なりますが、同じ結果でした。

弘田

2016年12月8日木曜日 1時00分11秒 UTC+9 伊藤望:

伊藤望

unread,
Dec 10, 2016, 10:31:13 PM12/10/16
to 日本Seleniumユーザーコミュニティ
伊藤です。

なるほど、、ありがとうございます。

XPathとしてはやはり問題なさそうなので、
Selenium側の問題ではなく、JAVAパーサ側の問題のように見えます。

System.out.println("ノードの値:" + ch);
のコードにて、表示されるXPathを調べれば何かわかるのではないかと。

弘田哲央

unread,
Dec 11, 2016, 9:30:55 PM12/11/16
to 日本Seleniumユーザーコミュニティ
伊藤様

ご返信遅れて申し訳ありません。

そうですね。パーサー側の確認をしてみたいと思います。

いろいろとご相談頂きまして、ありがとうございました。

弘田

2016年12月11日日曜日 12時31分13秒 UTC+9 伊藤望:

弘田哲央

unread,
Dec 12, 2016, 2:07:31 AM12/12/16
to 日本Seleniumユーザーコミュニティ
伊藤様

※追記
早速、Selenium実践入門買いまして、勉強しております!

弘田


2016年12月12日月曜日 11時30分55秒 UTC+9 弘田哲央:

伊藤望

unread,
Dec 12, 2016, 6:40:47 PM12/12/16
to 日本Seleniumユーザーコミュニティ
弘田さん

ご活用ありがとうございます!
Reply all
Reply to author
Forward
0 new messages