5

JSF1.2を使用しています。(xpathに基づく)いくつかのSeleniumテストを作成したいのですが、xpathの要素IDにワイルドカードが一致していないようです。

IBM Portal Server 6.1内でポートレットとして実行しており、プレフィックスがオフになっている環境でアプリケーションが中断するため、プレフィックスIDをオフにすることはできません。

現在、次の形式のxpathを使用しています

//*[substring(@id, 54)='id_distributorName']

これは一致します: <select size="1" class="firstName" name="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" id="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" >

しかし、JSFが常に同じ長さのviewIdを生成すると仮定するのは危険だと思います。

これを行うためのより良い方法はありますか?

入力コントロールに属性を使用しようとしましたnameが、もちろんJSFは属性を無視し、スクリプトの理由でおそらくevant処理のために、値がidと一致する独自のname属性を書き込みます)

4

3 に答える 3

6

XPath 2.0を使用している場合は、次のends-with()関数を使用してください。

//*[ends-with(@id, ':id_distributorName')]

XPath 1.0を使用している場合は、を使用して次の先頭string-length()を計算しますsubstring()

//*[substring(@id, string-length(@id) - 18) = ':id_distributorName']

ここで、18はの長さですid_distributorName:接頭辞なし!)。

于 2012-09-24T11:36:11.507 に答える
5

さて、私は自分の質問に答えたところです。

私はxpathについてほとんど知らないことを認めます、それが私の言い訳です!

答えは使用することですcontains()

すなわち //*[contains(@id, 'id_distributorName')]

于 2012-09-24T10:48:20.583 に答える
0

使用

//*[substring-after(@id, ':commonEntryForm:') = 'id_distributorName']
于 2012-09-24T13:08:02.990 に答える