2016-10-31 18 views
1

"From Date"と "To Date"を持つカレンダーから日付を検索するために使用している2つのコードセグメントを次に示します。Java Selenium - xpathを使用した検索で検索された要素が見つかりません

 webDriver.findElement(By.xpath("//table/tbody/tr/a[contains(text(),'October 30')]")).click(); 

     webDriver.findElement(By.xpath("//table/tbody/tr/a[contains(text(),'October 31')]")).click(); 

エラーメッセージを示しています。そのような要素:要素が見つかりません:org.openqa.selenium.NoSuchElementExceptionスレッドで 例外 "メイン" { "方法": "のXPath"、 "選択": "//table/tbody/tr/a [contains(text()、 'October 30')] "}

コードセグメントイメージ:code segment お手数をおかけしてください。ありがとうございました。 (少なくとも)修正する

答えて

1

2つのこと:

  • a要素がtrの直接の子ではない、もう一つのレベルがある - あなたはtitle属性をチェックする必要がtd要素
  • とないtext()

固定バージョン:

//table/tbody/tr/td/a[contains(@title, 'October 30')] 

あるいは、厳密な等価性チェックで:

//table/tbody/tr/td/a[@title = 'October 30'] 

それとも、両親をチェック回避:

//a[@title = 'October 30'] 

あるいは、あなたももう少し簡潔と一緒に行くみてくださいCSSセレクタ

webDriver.findElement(By.cssSelector("a[title='October 30']")).click(); 
+0

feedback alecxeに感謝します。それは部分的に問題を解決しました。 [From]と[To Date]フィールドがクリックされていても、[From Date]が1秒未満で消去され、レポートが選択された日付範囲で生成されると、選択した日付範囲が[To Date] From DateとTo Dateフィールドの両方に適用されます。 – mkarim

+0

@mkarimええ、私はあなたが文脈特有の検索を行うべきだと思っています。つまり、単に '// table/...'を持つのではなく、 '// table [@ id = 'MainContent_FromDate' ]/... 'を、また同様に日付を指定します。 – alecxe

+0

遅く返事を申し訳ありません。私はBy.xpathを使ってこれを解決できました。 From Dateのコードは次のとおりです。clickFromDate = webDriver.findElement(By.xpath( "/ html/body/form [@ id = 'ctl01']/div [@ class = 'container-fluid body-content']/div [1]/table [@ id = 'MainContent_FromDate']/tbody [@ class = 'container']/div [@ class = 'row'] [2]/div [@ class = 'col-sm-6']/tr [3]/td [1]/a ")); \t \t clickFromDate.click(); – mkarim

1

日付に頼らないでください。日付と日付は固定日付ではないため、不安定です。それぞれのレコードごとに変更されることがあります。

+0

フィードバックRajkumarに感謝します。カレンダーから日付フィールドを選択してクリックする方法がありますか?今のところ私はこれを解決するためにxpathを使いました。 – mkarim

関連する問題