2017-05-16 7 views
1

私は巨大なDOMツリーを見ています。 NodeJS/Seleniumを使用すると、特にaタグのタイトルで検索する必要があり、関連するhrefをクリックする必要があります。私は正規表現にはとても新しいので、すでに多くのエラーが発生しています。InvalidSelectorErrorは、私のxpathセレクタを定義する助けが必要です

By.xpath(//ul/class='slds-grid'//a[title="${uniqueStringToMatch}"]).click() 

InvalidSelectorError: invalid selector: Unable to locate an element with the xpath expression //ul/class='slds-grid slds-grid--pull-padded slds-wrap list'//a[text()="Load Client Referrals"] because of the following error: SyntaxError: Failed to execute 'evaluate' on 'Document': Type conversion failed while evaluating the expression.

以下のツリーが、私はそれが重要だとは思わないよう、上にあるすべての階層を抜けて取得するが、正しい:ここ

は私の最高のこれまでの試みであります私が間違っているなら私。ツリー内の最初の一意のクラス名から...

<ul class='slds-grid'> 
     <li class='slds-col'> 
      <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch" 
       <span class="label-ctr"> 
      </a> 
     </li> 
     <li class='slds-col'> 
      <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch" 
       <span class="label-ctr"> 
      </a> 
     </li> 
     <li class='slds-col'> 
      <a class="app_launcher" href="thelinkIwantToclick" title="uniqueStringToMatch" 
       <span class="label-ctr"> 
      </a> 
     </li> 
    </ul> 

li内のすべてのタイトルは一意です。

私はW3の学校を使って学習していますが、時間が無駄です。

(私は自分でXPathを書くための最も簡単な方法を探してもよ - ツールやチュートリアルをはるかに高く評価されるだろう!)

+0

@マークは、今、私はこれを使用しています//:// UL [@クラス= "slds- NoSuchElementError:そのような要素がありません:要素を見つけることができません:{"method": "xpath"、 "selector": "// ul [これはChrome Xpathヘルパープラグインで完璧なxpathであることを確認しました – AutomationEngineer3001

答えて

1

私はちょうど今それをテストすることはできないんだけど、私は通常使用XPathの属性と一致する@構文。このようなものがあなたのために働くだろうか?

By.xpath("//ul[@class='slds-grid']//a[@title='${uniqueStringToMatch}']").click() 

私もそれが難しいシンプルなXPathのための初心者レベルのチュートリアルを見つけることが判明し、試行錯誤によって多くのことを学んで終わってきました。また、Webページの要素のXPath文字列を生成するChromeとFirefox用の拡張機能もあります。そのことから多くのことを学びました。

あなたはW3CのXPath 1.0の仕様を読んでより多くのより悪い行うことができ
+0

まだ運がありません@/title = "Accounts"] "} 。最後に/ ..を追加しようとしましたが、同じエラーです。 – AutomationEngineer3001

+0

は実際のアーキテクチャを反映するように上記のdomツリーを更新しました – AutomationEngineer3001

+0

( "$ ul/class = 'slds-grid' // a [@title =" $ {page} "/ ..}/li/a [@title = "$ {page}"] – AutomationEngineer3001

1

:それはあなたがしようと比べて膨大な時間を節約する、後でスペック確か

https://www.w3.org/TR/xpath/

に比べて、驚くほど短いと読めるのです試行錯誤やコピー&ペーストの例で学習することができます。もちろん、誰もが独自の学習スタイルを持っています。

しかし、私は

//ul/class='slds-grid'//a[title="${uniqueStringToMatch}"] 

のようなものを見たとき、私はちょうどあなたが考えていた地球上のだろうか:あなたは明らかにパスとステップの中核となる概念を把握していません。

XPathには2つの基本操作があります。

  • A/B、次いでAにより選択されたものを見つける手段、及びそこから出発し、次いでB.

  • A [P]で選択されたものを見つけることはAで選択されたものを見つける手段、及び条件Pに一致しないものを除去する。

あなたclass='slds-grid'明確にフィルタ条件、および(クラスとタイトルではなく要素よりも属性があるので)それがゆえちなみに

//ul[@class='slds-grid']//a[@title="${uniqueStringToMatch}"] 

あるべきであることを意味する、XPathはを行うにはほとんど何もしています正規表現。

+0

タフな愛をありがとう:)私から私は新しいエラーを取得します:NoSuchElementError:いいえ。そのような要素:要素を見つけることができません:{"method": "xpath"、 "selector": "// ul [@ class = 'slds-grid slds-grid-pull-padded slds-wrap list]/li/a [@ title = "Accounts"] "}これはChrome Xpathヘルパープラグインで完全なxpathであることを確認しました - – AutomationEngineer3001

+0

xpath、同じエラーを試しました。私が学んでいるように、/ li/aと同じことをしています(これは私がW3で高レベルについて読んだものです)。 – AutomationEngineer3001

+0

私はこの表記 "$ {uniqueStringToMatch}"を使用しています。 – AutomationEngineer3001

関連する問題