2017-11-27 10 views
1

この問題を解決するのを手伝ってください。私はdevexpressを使って書かれたグラフを持っています。Seleniumが棒グラフを見つけることができません

http://image.ibb.co/hRD5oR/chart.png

そして私はセレンのようなテストを持っています。チャートを含むページを開き、すべての要素をクリックします(最小化/最大化、展開/折りたたみ)。

driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/div[1]/div/div[1]")).click(); 
Thread.sleep(1000); 
driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/div[1]/div/div[1]")).click(); 
Thread.sleep(1000); 

// Switch to a new window/Get the handle 
String parentHandle = driver.getWindowHandle(); 
System.out.println("Before click Category 1"); 
// Click bar to open drilldown 
//FSMSDashbopadObjects.NCbyReportCategoryBarCategory1(driver).click(); 
driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/div[2]/div/svg/g[8]/g/g/rect[1]")).click(); 
//*[@id="auditsByBrandDiversey"]/svg/g[8]/g/g/rect[1] 
System.out.println("After click Category 1"); 

テストはこの段階で失敗した:

driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/div[2]/div/svg/g[8]/g/g/rect[1]")).click(); 

セレンは、このバーを見つけることができませんここでは、コードです。私はsvgにいくつかのニュアンスがあると思います。 解決方法を教えてください。

+0

あなたのXパスは壊れやすいです。ターゲット要素へのパス内のタグを絞り込むことを検討してください。 –

+1

要素は ''タグ内にあり、[Selenium WebDriver \ [Java \]:XPathを使用してSVG内の要素をクリックする方法(https://stackoverflow.com/questions/41829000/selenium-webdriver)の可能な複製です-java-how-to-click-on-svg-using-xpathの要素) – DebanjanB

答えて

0

私はあなたの質問に答えるつもりですが、これには複数の解決策があります。 あなたはいつも5本の棒があると、あなたの問題はかなり簡単に解決されます。

5つのバー、そしてあなたの全体のページで常に5バールの場合

:、必ずクロームでF12を打つ、コンソール上でクリックし

driver.FindElement(By.XPath("//g[@class='dxc-markers']/rect"); 

:これは、5つの要素を返すために起こっている

、TYP:今すぐ$ X( "//グラム[クラス= 'DXC-マーカー' @]/RECT")

あなたは、背中の使用を5つの要素を取得している場合:

driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[1]"); 
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[2]"); 
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[3]"); 
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[4]"); 
driver.FindElement(By.XPath("(//g[@class='dxc-markers']/rect)[5]"); 

棒の量が可変であれば、戻ってくる要素の配列を作成する必要があります。配列を取得したら、[1]の代わりに配列の値を挿入すれば設定されます。

関連する問題