2017-01-24 2 views
2

мне нужно выбрать опцию, которая имея те же идентификаторы HTML:выберите флажок с помощью Селен 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. Я пошлю идентификатор контракта в filterbox под идентификатором контракта, который будет похож на автозаполнение box.so он даст результат на основе ввода. like this Но вот мой селеном код clickin на 1 флажком из списка флажков, как показано на рисунке 1.

Пожалуйста любые предложения

Edit: : код функции ключевого слова:

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 
     } 

Код для чтения файла первенствует:

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

Итак, проблема в том, что вы не нашли правильный флажок? Не могли бы вы показать нам свой код? Вы не можете сделать 'driver.getElement (By.id (" record-12034 "))' или что-то подобное? –

+0

@ToddSewell Я отправляю идентификатор контракта в текстовое поле, используя файл excel, для которого я использую Apache POI. У меня есть набор данных для отправки, для которых мне нужно установить флажок, а затем нужно очистить фильтровую папку. – Payal

+0

@LolCoder 아카 쉬 Я попытался использовать start с xpath, list, выбрано. проблема в том, что он выбирает флажок, но прежде, чем я отправлю значение в текстовое поле и это слишком первый флажок. – Payal

ответ

0

Проблема заключается в выборе флажка, который вы хотите щелкнуть.

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

Найдет все элементы, которые имеют «запись» в их ID (это все флажки в вашем случае) и возвращать только первый. Вам нужно выбрать точный флажок, который вы хотите щелкнуть, используя что-то вроде этого driver.findElement(By.xpath(".//input[@id='record-idofcheckboxyouwanttoclick']")).click();

EDIT: О, теперь я вижу, где проблема. Не уверен, как выглядит ваш HTML после фильтрации, но вы должны использовать xpath, чтобы найти элемент <td>, который содержит ваши входы/номера, которые вы отправили, а затем найдите его <label> предшествующий родственный брат, который содержит <input> (флажок), который вы хотите щелкнуть.

+0

спасибо. но это будет работать, только если я дам это прямо в моем коде. . By.xpath ("// * [@ ид = 'запись-12033']"))) нажмите(); ..но вместо этого я передаю testdata из файла excel и вам нужно установить флажок на основе ввода. поэтому каждый раз для любого значения я не могу изменить свой код. У меня есть набор входов для отправки в это текстовое поле. – Payal

+0

ok, я отредактировал мой ответ, надеюсь, что он помогает – acikojevic

+0

после фильтра мой HTML выглядит так же, как я дал. я собираюсь попробовать ваше предложение. Благодаря :) – Payal

0

Флажок, отображаемый непосредственно перед тем, как текстовое поле можно выбрать с помощью функции xpath preceding. Попробуйте следовать и дайте мне знать, если вы по-прежнему сталкиваетесь с одной и той же проблемой:

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 
    } 
Смежные вопросы