我在网页上有一个滑块控件,我试图通过Selenium进行测试。 HTML如下:
<div class="slider theme1 ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all" data-action="Slider" data-step="True" data-input="CurrentGoalValue">
<div class="slider-main">
<span class="ui-slider-handle ui-state-default ui-corner-all ui-state-active" style="top: 35%; left: 25%;"></span>
<ul>
<li data-val="0" style="left: 0%; width: 12.5%;" class="slider-item">7</li>
<li data-val="12.5" style="left: 12.5%; width: 12.5%;" class="slider-item ">8</li>
<li data-val="25" style="left: 25%; width: 12.5%;" class="slider-item ">9</li>
<li data-val="37.5" style="left: 37.5%; width: 12.5%;" class="slider-item ">10</li>
<li data-val="50" style="left: 50%; width: 12.5%;" class="slider-item">11</li>
<li data-val="62.5" style="left: 62.5%; width: 12.5%;" class="slider-item ">12</li>
<li data-val="75" style="left: 75%; width: 12.5%;" class="slider-item ">13</li>
<li data-val="87.5" style="left: 87.5%; width: 12.5%;" class="slider-item ">14</li>
<li data-val="100" style="left: 100%; width: 12.5%;" class="slider-item">15</li>
</ul>
</div>
</div>
对于我的测试,我发现找到合适的<li>
项并调用点击它来模拟用户点击数字(我有另一个测试,我在其间测试点击)。奇怪的是,“7”值始终失败,点击它而不是产生值“8”。这对我来说似乎很奇怪。有谁知道为什么会这样做?
以下是我选择给定项目的Selenium代码:
IWebElement sliderValue = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//li[normalize-space(@class)='slider-item' and text()='" + Days.ToString() + "']")));
if (sliderValue != null)
{
sliderValue.Click();
}
else
{
Assert.Fail(String.Format("No slider value was available for {0}.", Days));
}
我最初的猜测是测试框架点击了元素的远端边缘,但是文档表明不同,点击源自元素的中心。
我对Chrome驱动程序没有这个问题很奇怪,只有Firefox和IE。并且,为了清楚起见,它在网页本身上工作正常,点击这些数字会选择正确的数字,即使是最低值的数字。
答案 0 :(得分:2)
我有答案和解决方案。用于指示滑块上的位置的列表项跨越从数字到下一个数字的开头的整个距离。单击的默认位置位于中心。中心线单击会向上舍入到下一个数字。下面的代码用于点击,以便点击中心左侧(插入政治笑话),问题消失了:
Actions clicker = new Actions(Driver);
clicker.MoveToElement(sliderValue).MoveByOffset(-5, 0).Click().Perform();