Я пытаюсь перетащить маркер ползунка с двумя ручками к определенному значению, используя Selenium (в частности, в Python).Моя проблема в том, что ручка ползунка не перемещается к значению, которое я хочу.Например, я пытаюсь переместить минимальную ручку на «1», но она перемещается на «0,95».
Детали слайдера:
- мин.значение: 0 (находится в пикселях: 0)
- Макс.значение: «20» (находится в пикселях: 285)
- Ширина ползунка: 300 пикселей
- Шаг ползунка: 0,05 (0,0, 0,05, 0,1, 1,05, ..., 19,95,20)
- Снимок экрана слайдера, если он помогает
Вот мой фрагмент кода с добавленными комментариями:
def drag_handle_using_mouse(self, handle, new_val):
actions = ActionChains(self.driver)
slider_width = Decimal(self.slider.size["width"] - handle.size["width"]) # The max. val is always located 15 pixels left from the max. value
pixel_increments = Decimal(slider_width / ((self._max_handle_val - self._min_handle_val) / self._increments))
cur_val = self.get_handle_value(handle)
no_of_pixels_to_move = Decimal(pixel_increments * (new_val - cur_val) / self._increments)
actions.drag_and_drop_by_offset(handle, no_of_pixels_to_move, 0).perform()
actions.reset_actions()
Это может быть важноупомянуть, что слайдер имеет тип «ng5-slider» (https://www.npmjs.com/package/ng5-slider), потому что ни одно из решений, которые я нашел в google, не помогло мне
Кроме того, когда я смотрю в «левый»«Значение на вычисляемой панели в Chrome Inspector« 0,95 »и« 1 »Я вижу то же значение пикселя: Для значения:« 0,95 » Для значения:« 1 » Так, Я предполагаю, что значения пикселей округлены, и поэтому я не могу точно догадаться, какова формула для вычисления приращения.
HTML-код упомянутого слайдера:
<ng5-slider _ngcontent-c27="" class="ng5-slider" _nghost-c28="" id="portfolio_avg__modified_duration">
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar-wrapper ng5-slider-left-out-selection" ng5sliderleftoutselelem="" style="visibility: hidden;">
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar"></span>
</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar-wrapper ng5-slider-right-out-selection" ng5sliderrightoutselelem="" style="visibility: hidden;">
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar"></span>
</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar-wrapper" ng5sliderfullbarelem="">
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar"></span>
</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar-wrapper" ng5sliderselbarelem="" style="visibility: visible; width: 279px; left: 8px;">
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bar ng5-slider-selection" style="background-color: rgb(42, 166, 242);"></span>
</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-pointer ng5-slider-pointer-min" ng5sliderminhelem="" aria-valuenow="0" aria-valuetext="0" aria-valuemin="0" aria-valuemax="20" role="slider" tabindex="0" style="left: 0px; background-color: rgb(42, 166, 242);"></span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-pointer ng5-slider-pointer-max" ng5slidermaxhelem="" aria-valuenow="19.6" aria-valuetext="19.6" aria-valuemin="0" aria-valuemax="20" role="slider" tabindex="0" style="left: 279px; background-color: rgb(42, 166, 242);"></span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bubble ng5-slider-limit ng5-slider-floor" ng5sliderflrlabelem="" style="visibility: hidden; left: 0px;">0</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bubble ng5-slider-limit ng5-slider-ceil" ng5sliderceillabelem="" style="visibility: hidden; left: 268px;">>20</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bubble ng5-slider-model-value" ng5sliderminlabelem="" style="visibility: visible; left: 0px;">0</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bubble ng5-slider-model-high" ng5slidermaxlabelem="" style="visibility: visible; left: 262px;">19.6</span>
<span _ngcontent-c28="" class="ng5-slider-span ng5-slider-bubble ng5-slider-combined" ng5slidercmblabelem="" style="visibility: hidden; left: 0px;">0 1.95</span>
<span _ngcontent-c28="" class="ng5-slider-ticks" ng5slidertickselem="" hidden="">
<!---->
</span></ng5-slider>
ИмеетУ кого-то есть идея, в чем проблема с моим кодом? Кажется, я неправильно рассчитал приращение пикселей, но не понимаю, гдее проблема.
Важное примечание: Как я уже говорил в фрагменте кода, я вычитаю 15 из ширины ползунка, начиная с макс.значение (в данном случае «20») находится в пикселе №.«285», а ширина слайдера - «300».Я пытался выполнить свой код без этого вычитания, и он все еще не работает.