如何自动jQueryUI的selectmenu与硒的网络驱动器/硒IDE(How to automa

2019-10-22 05:24发布

我挣扎让硒选择从jQueryUI的官方插件生成的,如下面更详细描述的选择菜单中的选项,硒打开菜单,然后无二点击选择一个项目,关闭菜单,但未选中的选项。

在设置一些背景资料:

  • 使用Selenium IDE Firefox插件
  • 使用jQueryUI的SelectMenu演示页面上测试(因此,我们可以保证的代码片段是一个每个人都可以访问,并消除了selectmenu至少是正确实施,为他们的演示网站)

测试来源: http://jqueryui.com/selectmenu/

我曾尝试针对span.ui-selectmenu文本的硒点击,然后点击与ID = UI-ID-5,没有运气的元素。 然后,我尝试一下span.speed按钮,然后选择该选项。 也没有运气。

在所有情况下,菜单打开,关闭,但原始值仍处于选中状态。

然而,一个奇怪的事情发生了。 在硒的IDE,如果我这样做的话,就选择:

  1. 在命令双击打开菜单。
  2. 双击该命令选择正确的ID元素。
  3. 双击再次命令选择正确的ID元素。

现在突然,所选的选项将被更新。 但是,当我运行一个脚本首尾相连,与两个点击命令,再次失败,只是有页面上选择的默认选项。

编码:

<tr>
    <td>open</td>
    <td>/selectmenu/</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>css=span.ui-selectmenu-text</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>id=ui-id-5</td>
    <td></td>
</tr>

如果有人能在正确的方向指向我,任何提示或暗示,或实际问题的解决,那将是巨大的。

我DID发布此之前,所以搜索,但唯一一个我能找到的是3年前,溶液不再起作用:

如何测试使用UI selectmenu(jQuery的)和硒

Answer 1:

如果你感兴趣的是,选择一个值,你可以这样做没有点击并打开菜单。 只需运行:|选择|实际SELECT HTML元素的定位器|价值,你想|

这工作,因为jQuery.ui.selectmenu采取SELECT HTML元素和风格也相应地。

<tr>
  <td>select</td>
  <td>id=address-state</td>
  <td>label=Alabama</td>
</tr>

现在,如果你真的想模拟与UI整个用户输入,那么你应该使用clickAt命令,例如:

<tr>
  <td>clickAt</td>
  <td>id=ui-id-1-button</td>
  <td></td>
</tr>

当UI-ID-1键是作为插入你的页面上jQuery.ui.select的DIV(使用Chrome或FF检查员看到DOM结构)。 要选择,看在DOM在页面的底部,那里有与UL一个DIV通常由UI-ID-1-菜单生成的ID去和它里面你有下拉选项,你可以只使用一个选择并发送clickAt命令。

我的一个想出如何通过下拉向下滚动,并通过用户extensions.js命令逐页采取选项页的屏幕截图:

 Selenium.prototype.doScreenshootSelectMenuOptions = function(btnLocator, jsonOptions) { /** * Capture the jQuery.ui.selectmenu dropdown option values page by page screenshots. * * @param btnLocator Element locator for the selectmenu button * @param jsonOptions Options for the command as a JSON string. They are <code> * {"dropdownLocator":"<optional value>", "fileName":"<optional value>", "extension":"<optional value>"} * <\code> * <ul> * <li>dropdownLocator: Optional element locator for hidden selectmenu options locator. If * ommited it will be computed from options.dropdownLocator</li> * <li>fileName: Optional name of the file to use for the screenshot. It will be appended * with ' pg#' where # is the drop down page number. If omitted the default file name is * 'Dropdown'</li> * <li>extension: Optional name of the file extension to use for the screenshot. If * omitted the default extension is '.png'</li> * </ul> */ LOG.debug("user-extensions: doScreenshootSelectMenuOptions('" + btnLocator + "', '" + jsonOptions + "')"); var btn = this.browserbot.findElement(btnLocator); if(btn.id.indexOf('-button') <= 0) { throw new SeleniumError("screenshootSelectMenuOptions: wrong value for 'btnLocator'. It's applied to jQuery.ui.selectmenu drop downs!"); } var options = JSON.parse(jsonOptions); if(typeof options.dropdownLocator === 'undefined') { options.dropdownLocator = btn.id.substr(0, btn.id.indexOf('-button')) + '-menu'; } else if(options.dropdownLocator.indexOf('-menu') <= 0) { throw new SeleniumError("screenshootSelectMenuOptions: wrong value for 'jsonOptions.dropdownLocator'. It's applied to jQuery.ui.selectmenu drop downs!"); } options.fileName = (typeof options.fileName !== 'undefined') ? options.fileName : "Dropdown"; options.extension = (typeof options.extension !== 'undefined') ? options.extension : ".png"; var ddBtn = this.browserbot.findElement(btnLocator), opts = this.browserbot.findElement(options.dropdownLocator); ddBtn.scrollIntoView(); // Scroll to dropdown so it has room to open downwards this.doClickAt(btnLocator); // Open dropdown var height = isNaN(parseInt(opts.style.height)) ? opts.scrollHeight : parseInt(opts.style.height), scrollHeight = opts.scrollHeight, pages = scrollHeight / height, level = utils.screenshoot.getNextLevel(); if(pages <= 0) { throw new SeleniumError("screenshootSelectMenuOptions could not computer the number of dropdown menu pages to screenshoot!"); } // For each dropdown values page(s) for(var pgNr = 0; pgNr < pages; pgNr++) { var pgHeight = (pgNr * height); LOG.debug("user-extensions: screenshootSelectMenuOptions opts.scrollTo('0', '" + pgHeight + "')"); opts.scrollTo(0, pgHeight); this.doScreenshotEntirePage(options.fileName + ' pg' + (pgNr + 1) + options.extension, level); ddBtn.scrollIntoView(); } this.doClickAt(btnLocator); // Close dropdown utils.screenshoot.resetFromLevel(level); }; 



Answer 2:

其实,我终于找到了一个非常简单的回答这个问题。 您可以使用元素的鼠标悬停第一,然后单击它。 问题解决了。

希望能帮助到你。

保罗,你花了时间写这个答案,要对得起你,我会离开它的选民选择“接受的答案”。 感谢您的贡献。



文章来源: How to automate jQueryUI selectmenu with Selenium web driver/Selenium IDE