2016-04-28 9 views
0

私はsvgを使用して長方形にアクセスしたい。私は同じページに複数のsvgがあることを指定する必要があります。ここで私がアクセスを望むものである:私は svgで長方形にアクセスするjava

WebElement svgElement = OpenBrowser.driver.findElement(By.cssSelector("svg")); 

       // Get the Buttons with which we want to interact in a list 
       List<WebElement> gElements = svgElement.findElements(By.cssSelector("g")); 


       WebElement button = gElements.get(7); 
       Actions actionBuilder = new Actions(OpenBrowser.driver); 
       actionBuilder.click(button).build().perform(); 

この

を使用し、それが働いていたが、私はそれ以上のパスに対してこの

WebElement svgElement = svg.findElement(By.cssSelector("svg")); 

// Get the Buttons with which we want to interact in a list 
List<WebElement> gElements = svgElement.findElements(By.cssSelector("g")); 

System.out.println(gElements.size()); 


List<WebElement> button1 = gElements.get(9).findElements(By.cssSelector("g")); 
System.out.println(button1.size()); 
List<WebElement> button2 = button1.get(1).findElements(By.cssSelector("rect")); 
WebElement button = button2.get(4); 

Actions actionBuilder = new Actions(OpenBrowser.driver); 
actionBuilder.click(button).build().perform(); 

をしようとするとスロー小さいパスについては

<svg id="raphael-paper-252" height="239" version="1.1" width="399" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; -moz-user-select: none; cursor: default; position: relative; left: -0.5px; top: -0.5px; background-color: rgb(255, 255, 255);"> 
<desc>Scrollable Dual Y-Axis Combination Chart</desc> 
<defs> 
<g class="raphael-group-253-background"> 
<g class="raphael-group-260-canvas"> 
<g class="raphael-group-266-axisbottom"> 
<g class="raphael-group-266-axisbottom"> 
<g class="raphael-group-254-dataset" style="" clip-path="url('#0EF0615E-B63E-4B86-BCB3-DA1B99BCD97A')" transform="matrix(1,0,0,1,0,0)"> 
<g class="raphael-group-267-axistop"> 
<g class="raphael-group-495-scroll"> 
<g class="raphael-group-259-datalabels" style="" clip-path="url('#32ADDEF9-19E1-4425-A700-753A4E192433')" transform="matrix(1,0,0,1,0,0)"> 
<g class="fusioncharts-legend" transform="matrix(1,0,0,1,95,181)" style=""> 
<g class="raphael-group-255-hot" style="" clip-path="url('#FF53AB95-4DD3-4307-A757-AEC8F0979452')" transform="matrix(1,0,0,1,0,0)"> 
<g class="raphael-group-316-col-hot"> 
<rect style="cursor: pointer; stroke: rgb(192, 192, 192); stroke-opacity: 0.000001; fill-opacity: 0.000001; fill: rgb(192, 192, 192);" x="90.5" y="118.5" width="25" height="5" rx="1" ry="1" stroke="#c0c0c0" stroke-opacity="0.000001" stroke-width="1" fill-opacity="0.000001" fill="#c0c0c0"/> 

私は範囲外のインデックスを作成します。私はそれが最初のSVGない私は、SVGが最初にある要素にアクセスしようとしたwant.i 1を取ると思いますが、それはそれを見つけるdosent:

WebElement svg = OpenBrowser.driver.findElement(By.cssSelector("#box_w3 > div > div.widget-body > div > div")); 

私もXPathの絶対まだ何を使用してみました。どんな助けもありがとうございます。事前に感謝:)

答えて

0

私はそれを考え出したようです。私がやったことは、私は再びそれを検索するために持っていたし、それは最初の時間にそれを無視するように、私は例外を使用して、時にはそれはSVG要素が見つからないためにtry catchが独立して

WebElement divElement = OpenBrowser.driver.findElement(By.cssSelector("#chartContainerTicket")); 
WebElement spanElements = divElement.findElement(By.cssSelector("span")); 
try{ 
    svgElements = spanElements.findElement(By.cssSelector("svg")); 

    } 
    catch(StaleElementReferenceException e1){ 
     svgElements = spanElements.findElement(By.cssSelector("svg")); 

    } 

ステップごとにアクセスされ、要素が見つかりません。その後

List<WebElement> gElements = svgElements.findElements(By.cssSelector("g")); 

System.out.println(gElements.size()); 
System.out.println(gElements); 

を私はそれをpush.Ironicallyするために必要な四角形を見つけるまで、私はforループを使用して、それを押して、すべてのg要素を反復処理:私は、SVGで、リスト内のすべてのグラムタグ要素を置く。その後 最初のもの:|

//for(int i = 1 ; i<gElements.size();i++){ 
WebElement button1 = gElements.get(1 //here was i); 

Actions actionBuilder = new Actions(OpenBrowser.driver); 
    actionBuilder.click(button1).build().perform(); 
    System.out.println(button1); 
    Thread.sleep(1000);//} 

アクションはあなたがSVGのelement.This方法と直接対話することができないため、ここにあるすべての要素を一つずつアクセスし、リスト内のグラム要素を置くことは、これまでで最も信頼性があると思われるだけ私は働くことができます。私はこの答えが誰かの時間を節約することを願って:)平和!

関連する問題