如何使用 selenium 更改输入的值[type='range']

Posted

技术标签:

【中文标题】如何使用 selenium 更改输入的值[type=\'range\']【英文标题】:How do I use selenium to change the value of a input[type='range']如何使用 selenium 更改输入的值[type='range'] 【发布时间】:2013-04-24 17:00:30 【问题描述】:

我有一个在输入端使用 html5 的滑块 例如

<input id="sliderWidget" title="Slide me" type="range" min="1" max="1.6" step="0.3" value="1.3">

我一直在尝试使用 selenium 来更改滑块,但传统的图像滑块控件不适合我......例如

Action dragAndDrop = builder.dragAndDropBy(sliderWidget,0,30).build();
dragAndDrop.perform();

有没有人知道如何执行这种增量范围更改

提前致谢

【问题讨论】:

【参考方案1】:

您可以直接在 javascript 中设置值:

WebElement slider = webDriver.findElement(By.id("sliderWidget"));
System.out.println(slider.getAttribute("value"));

JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("javascript:document.getElementById(\"sliderWidget\").value=1.5;");

System.out.println(slider.getAttribute("value"));

请注意,sliderWidget 设置为 1.5,但结果为 1.6。这样您就可以测试step=0.3 是否运行良好。

【讨论】:

这不是一个现实的测试。即使元素不可访问,这也将起作用。更重要的是,它不会触发 &lt;input&gt; 上的更改处理程序。【参考方案2】:

我发现最稳定和跨浏览器的方法是执行二分搜索,将鼠标拖动到滑块拇指上,直到找到位置。

我的博客中有 Python/webdriver 代码:http://blog.usetrace.com/?p=279

【讨论】:

这可能是最现实的方法。但这几乎是一个仅链接的答案。如果不点击链接,我当然无法弄清楚这一点。【参考方案3】:

您可以选择元素并使用 send_keys 方法向其发送右/左箭头键(应该增加/减少输入)。 在 Python 中:

from selenium.webdriver.common.keys import Keys
...
slider = page.find_element_by_id("sliderWidget")
for i in range(10):
  slider.send_keys(Keys.RIGHT)

这应该将值增加 10。

【讨论】:

不错的主意 - 但我得到了WebDriverException: Message: unknown error: cannot focus element

以上是关于如何使用 selenium 更改输入的值[type='range']的主要内容,如果未能解决你的问题,请参考以下文章

如何以角度获取输入类型=月份的值

如何在 Selenium webDriver 中使用 Javascript 获取 textBox 的值? [复制]

使用 Selenium (Python) 获取输入框的值

无法更改输入字段中的值

如何使用 Python Selenium 在文本框(输入)中定位和插入值?

selenium 使用 chrome webdriver 访问具有更改 ID 的文本输入元素