Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
47
rated 0 times [  51] [ 4]  / answers: 1 / hits: 33336  / 8 Years ago, thu, july 7, 2016, 12:00:00

Given Below is a Piece of Code which denotes a Drop-Down.
I need to Select Date value in this Drop-down denoted By <option value=1 label=Date>Date</option>



<select id=type class=text-input ng-pristine ng-valid ng-scope ng-touched ng-style=cssStyle name=type ng-if=!options.hidePlaceholder ng-model=result.type qmx-observe-value=text ng-disabled=options.readonly ng-options=obj.value as obj.text group by obj.groupby for obj in selectData style=font-size: 13px; opacity: 1; width: 100%;>
<option class=ng-binding value=>----</option>
<option value=0 selected=selected label=Text>Text</option>
<option value=1 label=Date>Date</option>
<option value=2 label=Numeric>Numeric</option>
<option value=3 label=Switch>Switch</option>
<option value=4 label=Map Location Marker>Map Location Marker</option>
<option value=5 label=Picker>Picker</option>
<option value=6 label=List>List</option>
</select>


Following Methods didn't work.

1.) selecting this value using Select by importing org.openqa.selenium.support.ui.Select



Select elm = new Select(driver.findElement(By.xpath(.//*[@id='type']/option[3])));
elm.selectByVisibleText(Date);


Console shows:




Element should have been select but was option





2.) Clicking on the Drop-Down first to display option to be selected and then clicking on the option.



driver.findElement(By.xpath(.//*[@id='type'])).click();
driver.findElement(By.xpath(.//*[@id='type']/option[3])).click();


Console shows:




DEBUG Element is missing an accessible name: id: type, tagName:
SELECT, className: text-input ng-pristine ng-untouched ng-valid
ng-scope





3.) Using JavascriptExecutor to get the click.



driver.findElement(By.xpath(.//*[@id='type'])).click();    
((JavascriptExecutor)driver).executeScript(arguments[0].click();, driver.findElement(By.xpath(.//*[@id='type']/option[3])));


Console shows:




DEBUG Element is missing an accessible name: id: type, tagName:
SELECT, className: text-input ng-pristine ng-untouched ng-valid
ng-scope





4.) Using Mouse-Over on Option to be selected in Drop-down and then performing click on it.



driver.findElement(By.xpath(.//*[@id='type'])).click();    
WebElement subdrop = driver.findElement(By.xpath(.//*[@id='type']/option[3]));
Actions action = new Actions(drive);
action.moveToElement(subdrop).perform();
Custom.Twait();
action.click(subdrop).perform();


Console shows:




Exception in thread main
org.openqa.selenium.UnsupportedCommandException: POST
/session/a37a745a-e40c-45a9-9760-8e01b451a017/moveto did not match a
known command (WARNING: The server did not provide any stacktrace
information)




I have also added Wait in Between where i'm using this code. Here for simplicity i did not include it.



Need Help.


More From » java

 Answers
6

In your first option selenium clearly saying Element should have been select but was option, means here you are providing the xpath for option while expecting only xpath for select.



Don't need to use other option as you provided, Just use your first option as below :-



Select elm = new Select(driver.findElement(By.id(type)));
elm.selectByVisibleText(Date);


or ByIndex



elm.selectByIndex(2);


or ByValue



elm.selectByValue(1);


If your first option unfortunatly not work I prefer you to use your third option Using JavascriptExecutor as below :-



WebElement select = driver.findElement(By.id(type));

((JavascriptExecutor)driver).executeScript(var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }, select, Date);


Hope it will help you...:)


[#61482] Tuesday, July 5, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
turnerf

Total Points: 620
Total Questions: 101
Total Answers: 109

Location: French Polynesia
Member since Tue, Jul 7, 2020
4 Years ago
turnerf questions
;