WebDriver not clicking on a link?
Whenever "FirePath" does not detect an element within an anchor tag, which does not have a link text and the element belongs to an image class, try the below code snippet for "FirePath" to detect the element and "WebDriver" to click on the element.
Approach:
- One has to remove the class tag from the element so that it does not behave as an image anymore.
- The innerHTML has to be edited and a link text has to be appended to the element so that it can be recognized for further actions.
Code Snippet :
public static void replaceLinkIdentifier(WebDriver driver, By locator, String replace_id){
//Replacing link identifier
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element= driver.findElement(locator);
js.executeScript("arguments[0].setAttribute('class', arguments[1]);",element, ""); //Setting the class attribute to null, so that the element does not behave as an image.
js.executeScript("arguments[0].setAttribute('id', arguments[1]);",element, replace_id); //Substituting/Adding an id for future reference.
String el = element.getAttribute("id");
js.executeScript("var t ="+el+";t.innerHTML+='"+replace_id+"';", ""); //Adding the visible link text which is same as id.
}
The above code snippet would remove the image class from the element and add the link text, same as the 'replace_id' provided here.
After which the element could be acted upon, with reference to the id set in the snippet, which is same as the 'replace_id' here.
Hope the trick helped .
Whenever "FirePath" does not detect an element within an anchor tag, which does not have a link text and the element belongs to an image class, try the below code snippet for "FirePath" to detect the element and "WebDriver" to click on the element.
Approach:
- One has to remove the class tag from the element so that it does not behave as an image anymore.
- The innerHTML has to be edited and a link text has to be appended to the element so that it can be recognized for further actions.
Code Snippet :
public static void replaceLinkIdentifier(WebDriver driver, By locator, String replace_id){
//Replacing link identifier
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element= driver.findElement(locator);
js.executeScript("arguments[0].setAttribute('class', arguments[1]);",element, ""); //Setting the class attribute to null, so that the element does not behave as an image.
js.executeScript("arguments[0].setAttribute('id', arguments[1]);",element, replace_id); //Substituting/Adding an id for future reference.
String el = element.getAttribute("id");
js.executeScript("var t ="+el+";t.innerHTML+='"+replace_id+"';", ""); //Adding the visible link text which is same as id.
}
The above code snippet would remove the image class from the element and add the link text, same as the 'replace_id' provided here.
After which the element could be acted upon, with reference to the id set in the snippet, which is same as the 'replace_id' here.
Hope the trick helped .
Nice info :)
ReplyDelete