gpt4 book ai didi

java - 用 Selenium 确定 slider 的最大值

转载 作者:行者123 更新时间:2023-12-01 16:18:52 26 4
gpt4 key购买 nike

我有基于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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com