2016-10-14 10 views
2

私は、次のHTMLスニペットている上記のHTMLスニペットに基づいて XPath:次の要素のテキストに基づいて要素を選択しますか?

<div class="a-expander-content a-spacing-base a-expander-inline-content a-expander-inner a-expander-content-expanded" style="" aria-expanded="true"> 
    <form id="pp-yT-23" class="pmts-add-credit-card-form pmts-portal-component pmts-portal-components-pp-yT-8 a-spacing-none" data-pmts-component-id="pp-yT-8" data-pmts-ajax-continuation="true" action="https://www.bbc.com/gp/w/ref=w?w=UTF8&_encoding=UTF8&<input class="a-button-input" type="submit" aria-labelledby="pp-yT-32-announce" name="ppw-widgetEvent:AddCreditCardEvent"/> 
<span id="pp-yT-32-announce" class="a-button-text" aria-hidden="true">Add your card</span>=1&startingView=VIEW_INSTRUMENT_LIST" method="post"> 
    <input type="hidden" value="4|MXzCdjmqmSKRqcnRhGeW4iH0AQ-hnQ-2gnP1pGe3ibFlVEzK2Jwpm6KcMxCyOiJRtzKNCVbR1QBo2mfUL8Jbc5DnErF8cuPgQP15-EhnY_vDCMIm1igDBGrOR1-G_664V7rgc5fmYMvW5bguQ8NOEHJkM2t2JA2no4zG6ALkPg2hCUOnUyhTkAk3CWOP5c2HI_ml4criD9lV4VYbVWqpkGNtXQHT6GusM9rYxALSwjNdV9EuUtMbXhNdQrNNeIoELCjMHsrvFL2Qs70Bu0nh6SnpQ9bCS6r9rBBSKDWCezCRJZZqyQFDk8pvtZqUgyriWBS9uBwNKvqRO6P6jTRJYX5H0dGqkclvjL2R_J7HOuirDH6fwxplisgG48bZXCCSDICIXOKUF18PctRw74G-2e1-ZKD2IqZ-Efsjyel2SLSvBrEqV_d8dp7Sm7p_DNFtty7hhcinmB5Ej4VHFk4HCkAlx64Yex0hFV3yc3B3m4moPryyy75m9Fe4oa1KiZnORWF8EKbjAI7gFjhuTfpVdRZDiS-rtC7uahA4ZnR8ZMyEX223dvW1xF6RKSmwAtpES-9kk_PVy9fr7uvWyzzoGwNYFXtunYeo59bqDEGvomW6djTUMJAi2Xpn-06Sf45qhZytKe66ooTvy6l7yI_fpwhofaFvSj_hcFBkDXfDScsShk0EksXZi4YZynZbCBDocj61XslqJcj0NzY8nNi5AnD_UbOV5WS2PotxdzTMdFFABj-xtW72-aO_vEdoJ0LH0OOdOp8uwFm4sIHRoatIO5ced_v9_iceOt-j6uYlWxJsrf653X9s_rwdkF4z5u4e6UZ2askDGXEPI9wBReQhU8DafQM4JVsYfW-V1TXjkZipZIiEL-R5gxCBiRzi_tLY0YO_nlgXKxPPUytxXL_321837OfvmkbqY67uFvHemgSbxP2Y_4PzMatJ3uOpOiNHcC7vHMImbd8MzFTZDhdAlsfcCmEaeIRYudEh3L2b339J5yFxiWyeGosuY7deRUHeUOFSF9HkRBg2uXQMN8BlsbcYgWXdC5fjUbAoKXMTYYg_cxtTNViU-FgWw1fXvCyfot0idPpxOEweLLUIBfher25SwP6LMcipWIyFJlo4RPWqcIk4LbLJ4xAuuaX8b9Bwmo4yc9cFWGd1wuM3IJbWWTyPuJwHamgn3pDYkvimctFBHi3voq1xi6pxBXBSm75ara_t-cK1KVGYBz69fct3lQVVJTfYfCKu9JlYQz4GooylMcNIt5CqDEZK7i4cwwPDKtH9-yqLcodolmdFnbMamyK4cHNoRub_WbfHeXqw28pVeKE045ptD-xLMJOHAzMhdfH37SAUQ8eiOhug4jcymETMtlzHTVD1gQ-CyQ1bQWvUhWhW8gtvaGv5Wd6VUicmEBZ4mhLcc68MW_DQ9k2oyNkAvEb0HZgO9wB20hXGPpXSeBCElHjVBV3LDthYyDz829Vva-6iXkd3C5BQmEOaqjY8D0Key77bEL8cc-Dr35eMGv0oewGAjEnh_dBiuQ3jcw0q_yH8zDkRwz2x86Le8QC267W3R-b0zIqUqo_XdN2U2JZiVSmwXNH17Nz9RMgZRxYOzNXLEcmLkA1zR0b3z91L1XLGJ2LR8wq6HQLnx-17J_yxHRyMEiDa62rxITvsIqqAt4jXxLTtwvKOhtwVnyONrInjkWgaMUVtmlgIOCbLJi_rIW2rn7A4JO7qg" name="ppw-widgetState"/> 
    <div id="pp-yT-24" class="a-row a-spacing-base a-hidden aok-hidden"> 
    <div class="a-row a-spacing-base">Enter your card information:</div> 
    <div class="a-row a-spacing-base"> 
    <div class="a-section a-spacing-none pmts-inline-field-block"> 
    <div class="a-section a-spacing-none pmts-inline-field-block"> 
    <div class="a-section a-spacing-none a-spacing-top-large pmts-inline-field-block"> 
    <div class="a-section a-spacing-none pmts-inline-field-block"> 
    <div class="a-section a-spacing-none pmts-inline-field-block pmts-inline-add-button-spacing-top"> 
    <span id="pp-yT-32" class="a-button a-button-primary pmts-button-input"> 
    <span class="a-button-inner"> 
    <input class="a-button-input" type="submit" aria-labelledby="pp-yT-32-announce" name="ppw-widgetEvent:AddCreditCardEvent"/> 
    <span id="pp-yT-32-announce" class="a-button-text" aria-hidden="true">Add your card</span> 
    </span> 
    </span> 
    </div> 
    </div> 
    <div class="a-checkbox pmts-update-everywhere-checkbox a-spacing-base" data-a-input-name="ppw-updateEverywhereAddCreditCard"> 
    </form> 
    </div> 
    </div> 
    </div> 
    <hr class="a-divider-normal"/> 
    <div class="a-row a-spacing-base pmts-portal-component pmts-portal-components-pp-yT-13" data-pmts-component-id="pp-yT-13"> 
    <hr class="a-divider-normal"/> 
    <div id="pp-yT-34" class="a-section pmts-portal-component pmts-portal-components-pp-yT-14" data-pmts-component-id="pp-yT-14"> 
    </div> 
    </div> 
    </div> 

//span[@type='submit' and contains (., 'Add your card')] 
:私は次のXPathを使用して、ボタン/入力要素を選択するようにしてい

<input class="a-button-input" type="submit" aria-labelledby="pp-yT-32-announce" name="ppw-widgetEvent:AddCreditCardEvent"/> 
<span id="pp-yT-32-announce" class="a-button-text" aria-hidden="true">Add your card</span> 

しかし、何も選択できません。私はこれが "Add your card"というテキストが入力要素の要素ではなく、span要素であると仮定しています。ですから、私の質問は次の要素のテキストに基づいてボタン/入力要素を選択できますか?

Pls note要素のテキストに基づいて要素を選択する方法を理解していますが、実際には要素自体にはありませんが(画面上の要素に埋め込まれているように見えますが)、次の要素にあります。私はまた、name属性に基づいて要素を選択することができると理解していますが、これは私が望むものではありません。

ありがとうございました

+1

'/ span>(テキスト()、 'あなたのカードを追加')]'、これは動作しますか? – Sudeepthi

+0

はい、私はこのソリューションを投稿してくれてありがとうございました –

答えて

0

私は他の人と解決策を共有すると思いました。

基本的に、私のようなものを使用する必要があります:(@Sudeepthiによって投稿される)

//span[contains (., 'Add your card')] 

、あるいはよりよい解決策は次のようになります。

//span[contains(text(),'Add your card')] 

と省略:

[@type='submit'] 

2つの属性が2つの異なる要素の一部であるためです。

しかし、私が望むならこれのような2つの属性を組み合わせることが可能かどうかまだ分かりません。

+0

あなたのニーズに合った回答をupvote/acceptするのを忘れないでください。 http://stackoverflow.com/help/why-voteおよびhttp://stackoverflow.com/help/accepted-answerを確認してください。 –

0

あなたのXPATH式...

//span[@type='submit' and contains (., 'Add your card')] 

は...値submitを持つ属性typeを持つ<span>要素を選択します。 <span>にはこのような属性はなく、とにかく選択したい要素ではありません(<input>要素を選択すると言うので)。

は、おそらくあなたは、このような何かをしたい:最初にその直前の<input>兄弟に後方ステッピングそして、ラベルを運ぶ<span>を特定する(もしあれば)とそのをチェックして欲しかった<input>要素を見つけ

//span[contains (., 'Add your card')]/preceding-sibling::input[position() = 1 and @type='submit'] 

タイプ。

0

ボタン/入力要素は、次の要素のテキストに基づいて選択できますか?

はい、あなたは以下のようにAdd your cardとしての欲求<input>要素WRTを見つける見つけることができます: -

.//span[@class='a-button-inner' and span[text()='Add your card']]/input[@type='submit'] 

あなたはまた、次のようにcssSelectorを使用して、この<input>要素を見つけることができます: -

input.a-button-input[type='submit'][name*='AddCreditCardEvent'] 

の場合<span class="a-button-inner">要素もクリック可能ですが、私はのnormalize-space()機能を試してみることをお勧めします0、文字列から先頭と末尾の空白を取り除き、単一のスペースで空白文字の配列を置き換え、そして以下のように代わりの結果の文字列を返す -

.//span[normalize-space(.)='Add your card' and @class='a-button-inner'] 

または親<span>ため: -

.//span[normalize-space(.)='Add your card'] 
関連する問題