2017-10-26 11 views
0

私はセレンを学んでいる学生で、ターゲット文書と同じ行にあるチェックボックス(チェックマークを付ける)を設定しようとしています。ここでは、行がどのように見えるかです:Xpath検索による改善?

  <span><input>Checkbox</input></span> - <span>_lblDocumentCategoryDescription</span> - <span>_lblDocumentdescription</span> 

各行は、その行のチェックボックス、カテゴリや説明で構成されています。私は説明を提供し、対応するチェックボックスを行頭に設定する必要があります。

私は方法が非常に遅いので、私はより良い方法を探していますが、私はそれを複数回呼び出すことができ、遅さを複合しています。問題のページには、おそらく追加されるかもしれない315の異なる固定ドキュメントがあります(差し込み印刷機能へ)。私は通常少なくとも3行を追加して検索を実行する必要があります

私のCSSの知識は限られており、DOMをトラバースしているようです(親:?)いくつかのJavaScript、私は避けようとしている。私は、JSを実行すると正しくユーザーをエミュレートしないので、xpathが解決策であると思います。

私が知っているように、より速く、より良い、より効率的な解決策がなければなりません。ここで

は、私が現在使用しているものです:

メソッド呼び出し CPTools、setStupidCheckbox( "サブリース補遺"、真の);

方法:ここ

  public CPTools setStupidCheckbox(String documentToPrint, Boolean onIfTrue) { 
        this.log.trace("Starting: setStupidCheckbox; parameter: documentToPrint " + documentToPrint); 
        String xpathForCheckboxes = "/ancestor::tr//input"; 
        try { 
         String xpathForDocumentDescriptions = String.format("//span[contains(text(), '%s')]", documentToPrint); 
         tools.waitForElement(By.xpath(xpathForDocumentDescriptions), 2); 
         if (driver.findElement(By.xpath(xpathForDocumentDescriptions)).isDisplayed()) { 
          driver.findElementByXPath(xpathForDocumentDescriptions + xpathForCheckboxes).click(); 
         } 
        } catch (org.openqa.selenium.NoSuchElementException | ElementNotVisibleException e) { 
        } 
        this.log.trace("Ending: setStupidCheckbox"); 
        return this; 
       } 

は、テーブルの行のための完全なXPathである(IDの動的部分_ctl316ある):すべての可能な助けを事前に

  <tr class="DataGridCellData"> 
       <td class="DataGridCellDataCenterAligned"> 
        <span class="DataLabel"><input id="ctl01_PageBody_grdDocument_ctl316_chkSelect" name="ctl01$PageBody$grdDocument$ctl316$chkSelect" onclick="javascript:uiHelper.GridCellCheck(this, 'chkAllSelect');" type="checkbox"></span> 
       </td><td> 
        <span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentCategoryDescription">Approval Form</span> 
       </td><td align="left"> 
        <span id="ctl01_PageBody_grdDocument_ctl316_lblDocumentdescription">Sublease Addendum</span> 
       </td><td align="center"> 
       </td> 
      </tr> 

おかげ。

+0

あなたが取得したい要素? – NarendraR

+0

「// input [contains(@onclick、 'chkAllSelect')]」はどうですか? –

+0

私の質問のあいまいさのため申し訳ありません - 私はチェックボックスをチェックしようとしていますが、それらの315があります - 私が知っている唯一の参考資料は、文書の説明のスパン(サブリースの補遺)に存在するテキストです。 –

答えて

0

スパンテキスト(サブリース補遺)が一意である場合のXPathの下に試してみてください: //td[.=「サブリース補遺」]

+0

ありがとうKuldeep、私は試しましたが、これは私の方法より速く検索することはありません - 私は単に "Sublease Addendum"という文字列を探しているわけではありません。私はそのスパンにあるテキストを探しています - "Sublease Addendumはちょうど私が使用している1つの例です.315のすべてのアイテムのxpath検索は遅く、それが私が助けを求めているものです。 –

関連する問題