我正在创建一个测试来检查下拉列表的值,但是当我打电话时
new SelectElement(Driver.FindElement(By.XPath("//table[@id='tblListUserSearch']/tbody/tr/td[5]/div/select")));
它选择下拉列表和带有DDL的所有项目,但在尝试获取选项文本时,它始终为空/ null。
我也在使用SumoSelect Jquery插件进行此下拉列表。如果我要停止使用它,上面的行将删除' div' div在选择'之前似乎工作。
我错过了什么,或者只是Selenium不喜欢JQuery插件???
EDIT 这是我测试开始的代码
Selenium.Open("/ListUserStatus.aspx");
Selenium.WaitForPageToLoad("30000");
Thread.Sleep(2000);
var mySelect = new SelectElement(Driver.FindElement(By.XPath("//table[@id='tblListUserSearch']/tbody/tr/td[5]/div/select")));
var options = mySelect.Options;
编辑19/11/2015 这是我正在创建的HTML
<td style="padding: 3px;">
<div class="SumoSelect" tabindex="0"><select style="display: none;" id="testCase" class="SlectBox dropDown clearDropDown" multiple="multiple" data-bind="selectedOptions: selectedPage ">
<!-- ko foreach: PageAccess -->
<!-- ko if: $root.getPriviledges($data) != false -->
<option value="25" data-bind="text: $data.PageAccess, value: $data.PageAccessID">SPID Search</option>
<!-- /ko -->
<!-- ko if: $root.getPriviledges($data) != false -->
<option value="37" data-bind="text: $data.PageAccess, value: $data.PageAccessID">Submit Transaction</option>
<!-- /ko -->
<!-- /ko -->
</select><p class="CaptionCont SlectBox"><span class="placeholder">Please Select...</span><label><i></i></label></p><div class="optWrapper multiple"><p class="select-all"><span><i></i></span><label>Select All</label></p><ul class="options"><li data-val="25"><span><i></i></span><label>SPID Search</label></li><li data-val="37"><span><i></i></span><label>Submit Transaction</label></li></ul><div class="MultiControls"><p class="btnOk">OK</p><p class="btnCancel">Cancel</p></div></div></div>
</td>
正如您所看到的,我也在使用Knockout.JS绑定下拉列表的数据。在此之后我有一个简短的JS脚本将SumoSelect应用于下拉列表。下面的脚本
$('.dropDown').each(function () {
$(this).SumoSelect(
{
placeholder: 'Please Select...',
selectAll: true
});
});
应用此脚本后,它会创建DIV <div class="SumoSelect" tabindex="0">
。这似乎是导致问题的原因,因为当使用硒时,它似乎对WebDrivers不可见。
侧面说明 当使用Selenium插件用于Firefox并记录我的步骤并重放它们时,它能够找到DDL并在编码测试时点击它根本不喜欢它
答案 0 :(得分:1)
不确定您的网站代码如何,但我设法从下拉选项中获取文字,如下所示:
IWebElement TestDropDown = Driver.FindElement(By.XPath("//table[@id='tblListUserSearch']/tbody/tr/td[5]/div/select"));
string[] seperator = {"\n", "\r"};
string dropdownText = TestDropDown.Text;
string[] dropdownOptions = dropdownText.Split(seperator, StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分:0)
我尝试使用jquery插件实现的下拉菜单。希望这可以帮助你。
final Select droplist = new Select(driver.findElement(By
.xpath("xpath-expression")));
List<WebElement> oSize = droplist.getOptions();
int iListSize = oSize.size();
System.out.println("No.of list size is ......" + iListSize);
for (int i = 0; i < iListSize; i++) {
System.out.println("i value is..." + i);
droplist.selectByIndex(i);
String sValue = droplist.getOptions().get(i).getText();
System.out.println(sValue);
答案 2 :(得分:0)
此代码可能会有所帮助:
WebElement getdropdown = driver.findElement(By.id("your_id"));
Select select = new Select(getdropdown);
select.selectByIndex(1);
WebElement web2 = select.getFirstSelectedOption();
getdropdown.sendKeys(web2.getText());