【问题标题】:Selenium wont find text values for dropdownSelenium 找不到下拉菜单的文本值
【发布时间】:2015-11-17 15:49:54
【问题描述】:

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

new SelectElement(Driver.FindElement(By.XPath("//table[@id='tblListUserSearch']/tbody/tr/td[5]/div/select")));

它会选择下拉列表和所有带有 DDL 的项目,但是当尝试获取选项文本时,它总是空白/空。

我也在为这个下拉菜单使用SumoSelect Jquery 插件。如果我要停止使用它,上面的行会删除 'select' 之前的 'div' 并且似乎可以工作。

我是否遗漏了什么,或者仅仅是 Selenium 不喜欢 JQuery 插件???

编辑 这是我开始测试的代码

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;

编辑 2015 年 11 月 19 日 这是我正在创建的 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 &lt;div class="SumoSelect" tabindex="0"&gt;。这似乎是导致问题的原因,因为在使用 selenium 时,WebDrivers 似乎看不到它。

旁注 当使用 Firefox 的 Selenium 插件并记录我的步骤并重播它们时,它能够找到 DDL 并在编写测试时单击它根本不喜欢它

【问题讨论】:

  • 能否请您发布HTML代码或链接?所以我们可以帮助你

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


【解决方案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);

【讨论】:

    【解决方案2】:

    我尝试了使用 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);

    【讨论】:

      【解决方案3】:

      此代码可能会有所帮助:

       WebElement getdropdown = driver.findElement(By.id("your_id"));
       Select select = new Select(getdropdown);
       select.selectByIndex(1);    
       WebElement web2 = select.getFirstSelectedOption();
       getdropdown.sendKeys(web2.getText());
      

      【讨论】:

        猜你喜欢
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多