java - 用 Selenium 确定 slider 的最大值

标签 java selenium-webdriver selenium-chromedriver

我有基于java的selenium代码,可以对网站进行一些功能测试。在测试搜索结果时,我开始使用 slider 设置第一年和最后一年,以便获得可预测的结果。

我通过以适当的间隔移动最小 handle 和最大 handle 来实现此目的。我通过首先确定 slider 中年份的宽度(宽度 slider /间隔数)来计算此间隔。这很有效,但是,它基于当前间隔数。一旦网站的 build 者设置更多的间隔(现在是从2002年到2020年,设置了18个间隔,但将来不可避免地会改变),代码就会做出错误的调整。

我不知道如何轻松确定 slider 的最大值。我使用 google 找到了此代码(基于 getAttribute()),但 sm 获取的值 null

  WebElement slider = getDriver().findElement(By.xpath("//div[@id = 'slider-facetapi-facet-apachesolrsolr-block-created']"));
  String sm = slider.getAttribute("max");

我能想到的另一个解决方案是将最大 handle 移动 slider 的宽度,这会将其移动到其最大位置,然后查看其值是多少。但我只想考虑是否没有更简单的解决方案,不需要额外的浏览器操作。

感谢您的任何想法。

slider 的 html 如下所示:

<div id="slider-facetapi-facet-apachesolrsolr-block-created">
    <span class="facetapi-slider-min" style="margin-left: 146px;">2011</span>
    <div class="facetapi-slider" aria-disabled="false">
       <div class="ui-slider-range" style="left: 50%; width: 22.2222%;"></div><a class="ui-slider-handle ui-state-default ui-corner-all handle-min" href="#" style="left: 50%;"></a><a class="ui-slider-handle ui-state-default ui-corner-all handle-max" href="#" style="left: 72.2222%;"></a>
    </div>
    <span class="facetapi-slider-max" style="float: right; margin-right: 79.7778px;">2015</span>
</div>

slider 本身如下所示:

slider

最佳答案

为了实现这一目标,我改变了计划。我希望有人能从中受益。

我使用了另一种策略来独立于 slider 的最小值和最大值。 我通过首先计算一年的长度并使用该间隔宽度来确定移动 handle 的偏移量。我通过计算 (sliderwidth/(slidermax - slidermin))

来计算间隔宽度

但是由于我还没有找到确定这两个的方法,所以我通过使用两个句柄之间的间隔宽度来计算yearintervalwidth: ((最大 handle 位置 - 最小 handle 位置)/(最大 handle 年份 - 最小 handle 年份)),产生大致相同的值。如果新版本中 slider 范围发生更改,这仍然有效。我通过获取文本值来确定与句柄位置相对应的年份。 在代码中:

int minJaar = 2011;     // wanted new min year of slider
int maxJaar = 2016;     // wanted new max year of slider

WebElement slider = getDriver().findElement(By.xpath("//div[@id = 'slider-facetapi-facet-apachesolrsolr-block-created']"));

WebElement minhandle = slider.findElement(By.xpath("//a[contains (@class, 'handle-min')]"));
WebElement maxhandle = slider.findElement(By.xpath("//a[contains (@class, 'handle-max')]"));
int startminpos = minhandle.getLocation().getX();
int startmaxpos = maxhandle.getLocation().getX();
int sliderWidth = slider.getSize().getWidth();

// determine the years of the handles of the slider
int sliderMin = Integer.parseInt(slider.findElement(
    By.xpath( "//span[ contains(@class, 'slider-min')]")).getText());
int sliderMax = Integer.parseInt (slider.findElement(
    By.xpath( "//span[ contains(@class, 'slider-max')]")).getText());

 // fall back for the case the handles are on the same year 
 double rangewidth = slider.getSize().getWidth() / 18.0;
 if (sliderMax != sliderMin)
 {   // use positions of handle to calculate handle delta per year
    rangewidth = (startmaxpos - startminpos) / (sliderMax - sliderMin);
 }

// move lower handle
Actions SliderAction = new Actions(getDriver());
SliderAction.clickAndHold(minhandle).moveByOffset(-(int)((sliderMin - minJaar) * rangewidth),0).release().perform();

// move upper handle
slider = getDriver().findElement(By.xpath("//div[contains (@class, 'facetapi-slider')]"));
maxhandle = slider.findElement(By.xpath("//a[contains (@class, 'handle-max')]"));

SliderAction.clickAndHold(maxhandle).moveByOffset(-(int)((sliderMax - maxJaar) * rangewidth),0).release().perform();

关于java - 用 Selenium 确定 slider 的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62323920/

相关文章:

java - "if"语句中的局部变量错误 (Java)

javascript - SyntaxError : Unexpected identifier in selenium-webdriver/lib/http. js:454 异步执行(命令)

protractor - 将 Protractor chrome 驱动程序更新为 74

python - 如何通过 Python 打开 Chrome 配置文件

java - Java 是如何制作它的窗口的?

java比较器,按单词数比较字符串

java - 如何在我的应用程序的登录页面中使用忘记密码

c# - 如何使用带有 C# 的 Selenium 选择 img 标签标题或带有 td 的 alt

java - 无法使用带有 Selenium Webdriver 的 AutoIT 将图像保存在所需位置/文件夹

python - 下载 PDF 作为文件对象,无需使用 Python 中的 Chrome 和 Selenium 下载文件