Как нажать на кнопку радио с помощью селена Webdriver? - PullRequest
0 голосов
/ 24 сентября 2019

В приведенном ниже коде невозможно щелкнуть или получить текст радиокнопки, используя xpath и id обоих.

Пожалуйста, помогите мне выполнить вышеуказанные операции.

<section class="col-md-12 mb5">
    <div class="well well-cust">
        <label class="radio-inline pl0">
            <input type="radio" name="project_task" value="A" onclick="Javascript:projtasks();" id="radio1">&nbsp;&nbsp;Projects Tasks</label>
        <label class="radio-inline">
            <input type="radio" name="project_task" value="B" onclick="nonprojtasks(); " id="radio2">&nbsp;&nbsp;Non Projects Tasks</label>
        <label class="radio-inline">
            <input type="radio" name="project_task" value="C" checked="checked" onclick="assignedTasks();" id="radio3">&nbsp;&nbsp;Assigned Tasks</label>
        <label class="radio-inline">
            <input type="radio" name="project_task" value="D" onclick="issueAssigned(); " id="radio4">&nbsp;&nbsp;Issues Assigned</label>
    </div>      
</section>

Попытался нажать наэлемент, использующий оба xpath и id.

Я пробовал с приведенным ниже кодом:

//Import data for Radiobutton
String Radiobutton_val = formatter.formatCellValue(sheet.getRow(i).getCell(1));
System.out.println("Radio button 1 = "+driver.findElement(By.xpath("//*[@id=\"radio1\"]")).getText());
System.out.println("Radio button 2 = "+driver.findElement(By.xpath("//*[@id=\"radio2\"]")).getText());

if(driver.findElement(By.id("radio1")).getText().equals(Radiobutton_val)) {
    driver.findElement(By.xpath("//*[@id=\"radio1\"]")).click();
} else if(driver.findElement(By.id("radio2")).getText().equals(Radiobutton_val)){
    driver.findElement(By.xpath("//*[@id=\"radio2\"]")).click();
}

Я ожидаю, что он должен получить getText радиокнопки и на основе значения getText он должен щелкнуть на указанном радиокнопка

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

К click() на радиокнопке с текстом , считанным с листа excel , для которого необходимо вызвать WebDriverWait дляelementToBeClickable() и вы можете использовать следующую Стратегию локатора :

  • Использование xpath и contains():

    String Radiobutton_val = formatter.formatCellValue(sheet.getRow(i).getCell(1));
    // String Radiobutton_val ="Non Projects Tasks";
    // String Radiobutton_val ="Assigned Tasks";
    // String Radiobutton_val ="Issues Assigned";
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[contains(., '" + Radiobutton_val + "')]"))).click();
    
  • Использование xpath и contains(normalize-space()):

    String Radiobutton_val = formatter.formatCellValue(sheet.getRow(i).getCell(1));
    // String Radiobutton_val ="Non Projects Tasks";
    // String Radiobutton_val ="Assigned Tasks";
    // String Radiobutton_val ="Issues Assigned";
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[contains(normalize-space(), '" + Radiobutton_val + "')]"))).click();
    
0 голосов
/ 24 сентября 2019

Я полагаю, ваш getText вызов возвращает не ожидаемую строку?Вы должны проверить текст родительской метки.Попробуйте следующее:

if(driver.findElement(By.xpath("//*[@id='radio1']//..")).getText().equals(Radiobutton_val)) {                
    driver.findElement(By.xpath("//*[@id='radio1']")).click();
} 
...