Как перетащить ручку слайдера (ng5-слайдер) с помощью селена - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь перетащить маркер ползунка с двумя ручками к определенному значению, используя Selenium (в частности, в Python).Моя проблема в том, что ручка ползунка не перемещается к значению, которое я хочу.Например, я пытаюсь переместить минимальную ручку на «1», но она перемещается на «0,95».

Детали слайдера:

  1. мин.значение: 0 (находится в пикселях: 0)
  2. Макс.значение: «20» (находится в пикселях: 285)
  3. Ширина ползунка: 300 пикселей
  4. Шаг ползунка: 0,05 (0,0, 0,05, 0,1, 1,05, ..., 19,95,20)
  5. Снимок экрана слайдера, если он помогает

Вот мой фрагмент кода с добавленными комментариями:

    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;">&gt;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&nbsp;&nbsp;&nbsp;1.95</span>

<span _ngcontent-c28="" class="ng5-slider-ticks" ng5slidertickselem="" hidden="">
  <!---->
</span></ng5-slider>

ИмеетУ кого-то есть идея, в чем проблема с моим кодом? Кажется, я неправильно рассчитал приращение пикселей, но не понимаю, гдее проблема.

Важное примечание: Как я уже говорил в фрагменте кода, я вычитаю 15 из ширины ползунка, начиная с макс.значение (в данном случае «20») находится в пикселе №.«285», а ширина слайдера - «300».Я пытался выполнить свой код без этого вычитания, и он все еще не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...