Selenium找不到下拉列表的文本值

时间:2015-11-17 15:49:55

标签: jquery selenium selenium-webdriver xpath sumoselect.js

我正在创建一个测试来检查下拉列表的值,但是当我打电话时

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并在编码测试时点击它根本不喜欢它

3 个答案:

答案 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());