3

Scenario: I am automating a feature where i need to click on the radiio button but after many attempts it didn't work. So I checked with isDisplayed, isEnabled and isSelected.Upon execution it was found that the isDisplayed and isEnabled are false and isSelected is true. So in this case how can i perform click on this radio button

Automation using: Cucumber + Selenium with java

Below is the detialed information:

Screenshot: enter image description here

HTML Code:

<solvup-radio-type _ngcontent-c7="" _nghost-c9=""><div _ngcontent-c9="" class="ng-invalid ng-dirty ng-touched">

    <solvup-label _ngcontent-c9="" _nghost-c33=""><label _ngcontent-c33="" class="control-label">
    Which Remedy are you authorising? <!----><span _ngcontent-c33="" class="required-mark">*</span> 
</label>
<solvup-tooltip _ngcontent-c33="" _nghost-c36=""><!---->
</solvup-tooltip>
</solvup-label>

  <!----><div _ngcontent-c9="" class="radio">
      <label _ngcontent-c9="" class="">
          <input _ngcontent-c9="" type="radio" id="replace_refund_override_radio" class="ng-valid ng-dirty ng-touched">
          Replace
      </label>

  </div><div _ngcontent-c9="" class="radio">
      <label _ngcontent-c9="" class="">
          <input _ngcontent-c9="" type="radio" id="replace_refund_override_radio" class="ng-valid ng-dirty ng-touched">
          Refund
      </label>

  </div>
</div>
<solvup-hint-text _ngcontent-c9="" _nghost-c34=""><!----><p _ngcontent-c34="" class="help-block"></p>
</solvup-hint-text>
<solvup-validation-messages _ngcontent-c9="" _nghost-c35=""><!----><div _ngcontent-c35="" class="">
    <!---->
    <!---->
</div>

selenium Code:

@Given("^User Overriddes Refund$")
public void user_Overriddes_Refund() throws Throwable {
    Thread.sleep(6000);
    driver.findElement(By.xpath("//div[@class ='radio']/following-sibling::div/label/input")).isDisplayed();
    driver.findElement(By.xpath("//div[@class ='radio']/following-sibling::div/label/input")).isSelected();
    driver.findElement(By.xpath("//div[@class ='radio']/following-sibling::div/label/input")).isEnabled();
    //new WebDriverWait(driver, 50).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class ='radio']/following-sibling::div/label/input")));
    WebElement radio = driver.findElement(By.xpath("//div[@class ='radio']/following-sibling::div/label/input"));
    Actions ob = new Actions(driver);
    ob.moveToElement(radio);
    ob.click(radio);
    Action action = ob.build();
    action.perform();
    //List<WebElement> li = driver.findElements(By.id("replace_refund_override_radio"));
    //li.get(1).click();
}

Does anyone has any suggestion on this?

0

On observing the html code you pasted it seems that locator you are using in not unique i.e id="replace_refund_override_radio". ID is same for 02 elements and also all the locators you created are pointing to first element i.e Replace not to Refund. Reason for that if there are multiple elements having same locator then locator engine will pick only first element. To navigate to next element you need to modify the locator like:

List<WebElement> li = driver.findElements(By.id("replace_refund_override_radio"));
li.get(2).click();


//div[@class ='radio']/following-sibling::div/label/input[2]

You may be ask or wondering if you clicked on Replace checkbox it should work. But as what i think Refund and Replace are toggle based check boxes. You cannot deselect any checkbox until you select another. Please check if the software testing services you are automating are working with this. If not please add more info to the question.

  • I have already tried this approach of using List and the using the index value to click. The issue here is when i use isDisplayed and isEnables it comes false. – shreya_bhatngr Nov 26 '18 at 11:23
0

//div[@class ='radio']/following-sibling::div/label/input

Above locator used in your script will locate 2 radio buttons, You can use the following locators to uniquely select refund/replace:

refund: //input[contains(@text, 'Refund')]

replace: //input[contains(@text, 'Replace')]

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.