2017-01-24 7 views
2

ich brauche Checkbox auswählen, die gleiche ids HTML ist mit:wählen Checkbox Selen WebDriver

<label class="table-checkbox-label" for="record-12034"> 
<input id="record-12034" class="table-checkbox" type="checkbox"/> 
</label> 
</td> 
<td>91363007</td> 
<td>EC4N</td> 
<td>true</td> 
<td>ACTIVE</td> 
</tr> 
<tr data-id="12201"> 
<td> 
<label class="table-checkbox-label" for="record-12201"> 
<input id="record-12201" class="table-checkbox" type="checkbox"/> 
</label> 
</td> 

list of checkboxes. ich werde Vertrags-ID an filterbox unterhalb der Vertrags-ID senden, die wie eine Autocomplete-Box ist. So wird es Ergebnis basierend auf Eingabe geben. like this Aber hier meine Selen-Code auf der 1. Kontrollkästchen aus der Liste der Kontrollkästchen ist clickin als 1. in Bild gezeigt

Bitte Anregungen

Edit: : Code für die Keyword-Funktion:

public void filter(String objectName,String testData) throws InterruptedException,IOException { 

WebDriverWait wait = new WebDriverWait(driver, 15); 

      wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")));//wait for textbox 

      driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).sendKeys(testData);//send data to textbox 
      System.out.print("Text box is now visible"); 
      driver.findElement(By.xpath(".//*[starts-with(@id,'record')]")).click();//click on checkbox 
      driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).clear();//clear textbox 
     } 

-Code zum Lesen Excel-Datei:

public void ASRTaccounts() throws IOException, InterruptedException, EncryptedDocumentException, InvalidFormatException, AWTException { 
       keyword = new keywords(); 
       List<String> data = new ArrayList<String>(); 
        File file = new File("C:\\RDMT test\\rdmt_test\\RDMT_\\LeadSuite.xlsx"); 
        Workbook workbook = WorkbookFactory.create(file); 
        DataFormatter formatter = new DataFormatter(); 
        Sheet sheet = workbook.getSheet("login"); 
        for (Row row : sheet) { 
         for (Cell cell : row) { 
          data.add(formatter.formatCellValue(cell)); 
         } 
        } 
       System.out.println(data); 
       for (int i=3;i<data.size();i++){ 

        if (data.get(i).equals("filter")){ 
         String key = (String) data.get(i); 
         String testData = (String) data.get(i+1); 
         String objectName = (String) data.get(i+2); 
         System.out.println(key); 
         System.out.println(testData); 
         System.out.println(objectName); 
         keyword.filter(objectName,testData); 

        } 
+0

Also das Problem ist, dass Sie nicht die richtige Checkbox finden? Können Sie uns Ihren Code zeigen? Können Sie 'driver.getElement (By.id (" record-12034 "))' oder etwas Ähnliches nicht tun? –

+0

@ToddSewell Ich sende die Vertrags-ID an die Textbox mit der Excel-Datei, für die ich Apache POI verwende. Ich habe eine Reihe von Daten zu senden, für die ich Kontrollkästchen auswählen muss und Filterbox löschen müssen. – Payal

+0

@LolCoder 아카 쉬 Ich habe versucht mit Start mit Xpath, Liste, ist ausgewählt. das Problem ist, dass es das Kontrollkästchen aktiviert, aber bevor ich Wert an Textfeld und das auch zuerst Kontrollkästchen senden. – Payal

Antwort

0

Das Problem besteht darin, das Kontrollkästchen auszuwählen, auf das Sie klicken möchten.

driver.findElement(By.xpath(".//*[starts-with(@id,'record')]")).click(); 

Diese alle Elemente finden, die „Record“ in ihrer ID haben (diese sind alle Kontrollkästchen in Ihrem Fall) und das Rück nur die erste. Sie müssen genau eine Checkbox auswählen, die Sie klicken möchten, indem Sie so etwas verwenden driver.findElement(By.xpath(".//input[@id='record-idofcheckboxyouwanttoclick']")).click();

EDIT: Oh, jetzt sehe ich, wo das Problem ist. Nicht sicher, wie Ihr HTML nach der Filterung aussieht, aber Sie sollten Xpath verwenden, um <td> Element zu finden, das Ihre Eingaben/Zahlen enthält, die Sie gesendet haben, und dann finden Sie <label> vorhergehenden Geschwister, die <input> (Kontrollkästchen) enthält, die Sie klicken möchten.

+0

danke dafür. aber das funktioniert nur, wenn ich dies direkt in meinem Code gebe. By.xpath ("// * [@ id = 'record-12033']"))). Click(); ..aber statt dessen gebe ich Testdaten aus der Excel-Datei und muss auf das Kontrollkästchen auf der Grundlage der Eingabe klicken. so kann ich für jeden Wert meinen Code nicht ändern. Ich habe eine Reihe von Eingaben, um diese Textbox zu senden. – Payal

+0

ok, ich habe meine Antwort bearbeitet, hoffe, es hilft – acikojevic

+0

nach Filter mein HTML sieht genauso aus wie ich es gegeben habe. Ich werde versuchen, Ihren Vorschlag zu versuchen. Vielen Dank :) – Payal

0

Kontrollkästchen, das kurz vor dem Textfeld angezeigt wird, können mit der Xpath-Funktion preceding ausgewählt werden. Versuchen Sie, folgen Sie und lassen Sie mich wissen, wenn Sie immer noch das gleiche Problem haben:

public void filter(String objectName,String testData) throws InterruptedException,IOException { 

     WebDriverWait wait = new WebDriverWait(driver, 15); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")));//wait for textbox 

     driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).sendKeys(testData);//send data to textbox 
     System.out.print("Text box is now visible"); 
     driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input/preceding::input[1]")).click();//click on checkbox 
     driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input/preceding::input[1]")).clear();//clear textbox 
    }