2016-03-27 17 views
0

私はこのサイトを訪れましたが、私の問題の解決策を見つけることができず、セレンの経験が豊富な人が私を助けてくれるのだろうかと思っていました。 長い投稿には申し訳ありませんが、私は物事を適切に説明したことを確認したかったのです。Selenium Webdriver:複数の行の値に基づいてチェックボックスを見つける

私はJavaを使用しています。私は通常、Rational Function Tester(Java)を使用しますが、変換の容易性を確認するために、いくつかのテストからコードを書き直すことができるかどうかを確認しようとしています。

私は11列と4行のテーブルを持っています(ただし、20行か50行ですが、テスト中に変動します)。 テーブルとその内容を読んで、必要な行を見つけることができます。最初の10個のセルの値をそれぞれ比較し、一致する場合は列11にあるチェックボックスをクリックします。それ以外の場合は次の行に進みます。

この関数は、各セルから値を取得するために正しく機能します。しかし、チェックボックスをクリックしようとすると、常に最初の行にあるものが選択されます。 属性を確認すると、すべてのチェックボックスの名前が同じで、値が異なる(1330361、1330363、1330359など)ことがわかりました。面白いことに、行のすべてのチェックボックスを検索すると、4つの行が表示されます(行全体ではなく、表全体にある数字)。

私はおそらく非常に基本的な間違いを犯していますが、私はそれが何であるか把握できません。

次のコードを使用してテーブルを検索します。この関数はテーブルの行を受け取り、この時点ではセルの値を報告していて、その行にあるチェックボックスをクリックしようとしています。デバッグ機能のようなものです。 膨大な量のコードを投稿するのが適切かどうかわからないので、テーブルの各チェックボックスをクリックしようとする短いバージョンを入れます。

// Passing a specific table row to the function: 
List<WebElement> columns=myRow.findElements(By.tagName("td")); 
for (int iLoop = 0;iLoop < columns.size();iLoop++) 
{ 
    System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'"); 
    // code to compare actual and expected values and setting of a boolean variable. 

    if (iLoop == 10 && recordMatch) 
    { 
      tCheckbox = myRow.findElement(By.xpath("//input[@type='checkbox']")); 
     System.out.println("Value is :" + tCheckbox.getAttribute("value").toString()); 
      tCheckbox.click(); 
    } 

答えて

0

チェックボックスを取得するXPathは、スコープとしてページ全体を持っています。私は要素にスコープの相対的な取得する前にドットを追加します。

// Passing a specific table row to the function: 
List<WebElement> columns=myRow.findElements(By.tagName("td")); 
for (int iLoop = 0;iLoop < columns.size();iLoop++) 
{ 
    System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'"); 
    // code to compare actual and expected values and setting of a boolean variable. 

    if (iLoop == 10 && recordMatch) 
    { 
    tCheckbox = myRow.findElement(By.xpath(".//input[@type='checkbox']")); 
    System.out.println("Value is :" + tCheckbox.getAttribute("value").toString()); 
    tCheckbox.click(); 
    } 
} 

をしかし、より良い方法は、列を反復する前に、すべてのチェックボックスを収集するために、次のようになります。

// Passing a specific table row to the function: 
List<WebElement> columns=myRow.findElements(By.xpath("//td[.//input[@type='checkbox']]")); 
List<WebElement> checkboxes=myRow.findElements(By.xpath("//td//input[@type='checkbox']")); 
for (int iLoop = 0;iLoop < columns.size();iLoop++) 
{ 
    System.out.println("Column " + iLoop + " : '" + columns.get(iLoop).getText().toString() + "'"); 
    // code to compare actual and expected values and setting of a boolean variable. 

    if (iLoop == 10 && recordMatch) 
    { 
    tCheckbox = checkboxes.get(iLoop); 
    System.out.println("Value is :" + tCheckbox.getAttribute("value").toString()); 
    tCheckbox.click(); 
    } 
} 
+0

こんにちはフロラン、 0123:値に基づいて、チェックボックスをクリックすると、forループを使用してすべての値をリストボックス絶対XPathを確認し、「i」の値が、下記の 参照してくださいコードを渡す必要がありますうわー!それは素晴らしい仕事でした。私はあなたにとても感謝します。 私は本当にxpathの知識に取り組む必要があると思います。なんらかの理由で、沈んだだけではありません。私はRFTを扱うのに慣れています。 Andre –

0

あなたがしたい場合は

 WebElement table = driver.findElement(By.xpath("//div[@id ='content']/table")); 
     /*List <WebElement> head = driver.findElements(By.tagName("th")); 
     head.size(); 

     for (int h=0;h<head.size();h++){*/ 
     List <WebElement> row = driver.findElements(By.tagName("tr")); 
     row.size(); 


     for (int i=0;i<row.size();i++){ 



      List <WebElement> col = row.get(i).findElements(By.tagName("td")); 
      col.size(); 


      for (int j=0;j<col.size();j++){ 
       String cv = col.get(j).getText(); 
// If name is Saudi Arabia, it will click on check box 
       if(cv.equalsIgnoreCase("Saudi Arabia")){ 
// Divide the x path where colunm is changing html/body/div[1]/div[5]/div[2]/div/div/table/tbody/tr[pass i value]/td[6]"; 
        String xp1 = "html/body/div[1]/div[5]/div[2]/div/div/table/tbody/tr["; 
        String xp2 = "]/td[6]"; 

// Pass the i value xp1+i+xp2 
        driver.findElement(By.xpath(xp1+i+xp2)).click(); 
       } 
       System.out.println(cv); 
      } 




     } 
関連する問題