I built my script in BDD framework. And I tried several method to handle Bootstrap dropdown used in the application I'm testing.
But there is no luck.
How to handle bootstrap dropdown for my application using my framework?
UIAction class File:
I've coded all the UI actions which will be performed commonly and I'm calling this functions method in another class where ever necessary.
So for dropdown I tried with select method I've coded in UIAction, which is as follows.
Select method in UIAction class:
public class UIActions {
public static void select(String UIName, String objTechName, String data) throws Exception{
try{
Log.info("Selecting item in Combo " + objTechName);
//driver.findElement(By.xpath(OR.getProperty(object))).sendKeys(data);
//final Select selectBox = new Select(driver.findElement(By.xpath(OR.getProperty(object))));
final Select selectBox = new Select(driver.findElement(ObjectMap.getLocator(objTechName)));
//selectBox.selectByValue(data);
selectBox.selectByVisibleText(data);
}catch(Exception e){
Log.error("Not able to Select an item --- " + e.getMessage());
throw new UserDefinedException("<<< Unable to Select '" + data + "' in Field '" + UIName + "' >>> "+e.getMessage());
//DriverScript.bTestStepResult = false;
}
}
}
Defined the object in separate class:
public class ObjectsDefinition extends UIActions {
public static final String OBJ_Origin_DROPDOWN = "|xpath|//span[contains(text(),'BRANCH')]";
}
Called the method for select function in stepdefinition class file in my framework:
public class StepDefinitions extends UIActions {
@And("^User captures Origin (.*)$")
public void User_captures_Origin(String arg7) throws Throwable {
UIActions.select("OBJ_Origin_DROPDOWN", VASTObjectsDefinition.OBJ_Origin_DROPDOWN, arg7);
//UIActions.driver.findElements(By.xpath("//span[contains(text(),'BRANCH')]"));
Thread.sleep(50);
}
}
When the above code not worked, I tried as per the suggestion from 1 of the blog to handle the bootstrap dropdown, But this also didnot worked for me:
@And("^User captures Origin (.*)$")
public void User_captures_Origin(String arg7) throws Exception{
// this is using action class to set focus on any element
// below line is just for clicking on perticular dropdownlist
WebElement ele= driver.findElement(By.xpath(".//*[@id='content']/div/div[1]/div[2]/div[1]/div[2]/div[2]/div/div/div/button"));
// To count the number of value in drop down
Actions act= new Actions(driver);
act.moveToElement(ele).perform();
// below line xpath is to select the value
List<WebElement> Dropdownvalues= driver.findElements(By.xpath("//span[contains(text(),'BRANCH')]"));
int total_links=Dropdownvalues.size();
System.out.println("Total values count are:"+total_links);
for(int i=0;i<total_links;i++){
// To get the name of all links:
WebElement element=Dropdownvalues.get(i);
String dropdownvalues_names= element.getAttribute("innerHTML");
// boolean status= element.isEnabled();
// System.out.println("Links name are:"+links_names +"Link status is "+ status);
// To clicking on perticular link:
if (dropdownvalues_names.equalsIgnoreCase("BRANCH")){
element.click();
break;
}
}
// Actions act= new Actions(driver);
// act.moveToElement(ele).perform();
// driver.findElement(By.xpath("//div[2]/div/select")).click();
// new Actions(driver).moveToElement(ele).click().perform();
Thread.sleep(3000);
}
When I run the script getting the error as below:
org.openqa.selenium.ElementNotVisibleException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 85 milliseconds
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:55:52'
System info: host: '0967JNBPBB010L', ip: '10.5.70.125', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_76-ea'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, version=9, platform=WINDOWS, proxy={proxyType=}, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:24652/, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
Session ID: df6bf10c-51d0-46b3-ab24-95897f29223f
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:326)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
at com.org.frameworkFiles.stepDefinitions.StepDefinitions.User_captures_Origin(StepDefinitions.java:173)
at ?.And User captures Origin BRANCH(1_Create Application.feature:12)
Below are the Bootstrap codes writted for the dropdown field in my applicationn:
This part of codes are for clicking the dropdown:
<div class="btn-group bootstrap-select show-tick">
<button class="btn dropdown-toggle bs-placeholder btn-default" role="button" data-toggle="dropdown" type="button" data-id="ContentPlaceHolder1_ddlOrigin" title="Choose Origin Code">
<span class="filter-option pull-left">Choose Origin Code</span>
<span class="bs-caret">
<span class="caret"/>
</span>
</button>
This part of codes are for selection of dropdown fields:
<div class="dropdown-menu open" role="combobox">
<ul class="dropdown-menu inner" aria-expanded="false" role="listbox">
<li data-original-index="0">
<a class="" role="option" data-tokens="null" style="" tabindex="0" aria-disabled="false" aria-selected="false">
<span class="text">BRANCH</span>
<span class="glyphicon glyphicon-ok check-mark"/>
</a>
</li>
<li data-original-index="1">
<a class="" role="option" data-tokens="null" style="" tabindex="0" aria-disabled="false" aria-selected="false">
<span class="text">CALL CENTRE</span>
<span class="glyphicon glyphicon-ok check-mark"/>
</a>
</li>
<li data-original-index="2">
<a class="" role="option" data-tokens="null" style="" tabindex="0" aria-disabled="false" aria-selected="false">
<span class="text">INTERNET</span>
<span class="glyphicon glyphicon-ok check-mark"/>
</a>
</li>
<li data-original-index="3">
<a class="" role="option" data-tokens="null" style="" tabindex="0" aria-disabled="false" aria-selected="false">
<span class="text">PRIVATE BANKING</span>
<span class="glyphicon glyphicon-ok check-mark"/>
</a>
</li>
</ul>
</div>
Again select HTML code was written with same fields but, when i try to higlight with this through firebug nothing was highlighting: The highlight of field was happened only with above part of codes:
<select id="ContentPlaceHolder1_ddlOrigin" class="selectpicker" title="Choose Origin Code" data-max-options="1" multiple="" name="ctl00$ContentPlaceHolder1$ddlOrigin" tabindex="-98">
<option value="BRH">BRANCH</option>
<option value="CC">CALL CENTRE</option>
<option value="INT">INTERNET</option>
<option value="PB">PRIVATE BANKING</option>
</select>
</div>
<span id="ContentPlaceHolder1_RequiredFieldValidator8" class="zmdi zmdi-alert-triangle form-control-feedback" style="visibility:hidden;"/>
</div>
You are missing to click on the drop down button. This is minimal code to select drop down option. Please try and let me know.
@And("^User captures Origin (.*)$")
public void User_captures_Origin(String origin) throws Exception{
// click on drop down button
WebElement DropdownButton = driver.findElement(By.xpath("//button[@data-id='ContentPlaceHolder1_ddlOrigin']"));
DropdownButton.click();
// select a drop down option
WebElement DropdownOption= driver.findElement(By.xpath("//ul/li/a/span[text()="+origin+"]"));
DropdownOption.click();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With