Size: a a a

JavaScript testing

2020 December 06

BO

Boris Osipov in JavaScript testing
Nikolay Aleksandrovich
ну а чём тогда по твоему мнению?
я беру getLocation слайдера, по которому мне нужно щёлкать
координата x возвращается с дробным значением
в клик я это дробное значение передать не могу, приходится использовать округления
из-за этого в разных кейсах клик либо будет попадать на границу элемента, либо нет

где ошибка?
покажи код для начала.
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
ну держи, коли спрашиваешь

 async setPriceUsingClick(value: number, initialValues: {min: number, max: number}) {
   const lineStart = await this.line.getLocation();
   const lineSize = await this.line.getSize();
   const priceRange = initialValues.max - initialValues.min;
   const pixelsPerOneValue = lineSize.width / priceRange;
   const xCoordinate = (value - 1) * pixelsPerOneValue + lineStart.x;
   await browser.performActions([
     {
       type: 'pointer',
       id: 'mouse',
       actions: [
         { type: 'pointerMove', duration: 0, x: Math.floor(xCoordinate) , y: Math.floor(lineStart.y) },
         { type: 'pointerDown', button: 0 },
         { type: 'pointerUp', button: 0 }
       ]
     }
   ]);
 }
источник

m

mkots in JavaScript testing
А setValue для вас не подходит?
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
performActions приходится юзать из-за того, что в сафари обычный клик не работает, но там тоже инт надо передавать
источник

m

mkots in JavaScript testing
Странный тест для е2е, как по мне
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
а это не совсем e2e per se, но метод используется в некоторых местах
если слайдер возвращается в изначальное значение после изменений - сбрасывается фильтр и query параметры

говорю, проблемы заставить работать тест с помощью костылей нет, я просто пытаюсь понять что не так с этими дробными значениями, откуда они вылезают
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
mkots
А setValue для вас не подходит?
нет, есть несколько причин, почему приходится именно так всё делать
источник

BO

Boris Osipov in JavaScript testing
Nikolay Aleksandrovich
ну держи, коли спрашиваешь

 async setPriceUsingClick(value: number, initialValues: {min: number, max: number}) {
   const lineStart = await this.line.getLocation();
   const lineSize = await this.line.getSize();
   const priceRange = initialValues.max - initialValues.min;
   const pixelsPerOneValue = lineSize.width / priceRange;
   const xCoordinate = (value - 1) * pixelsPerOneValue + lineStart.x;
   await browser.performActions([
     {
       type: 'pointer',
       id: 'mouse',
       actions: [
         { type: 'pointerMove', duration: 0, x: Math.floor(xCoordinate) , y: Math.floor(lineStart.y) },
         { type: 'pointerDown', button: 0 },
         { type: 'pointerUp', button: 0 }
       ]
     }
   ]);
 }
а так нельзя? const xCoordinate = (value - 1) * pixelsPerOneValue + lineStart.x + pixelsPerOneValue / 2 ;
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
не, ну такого рода костыли не проблема сделать, я даже согласен с тем, что внутри слайдера значения будут немного "шататься"
моя главная проблема с тем, что если value = 1 (то есть я пытаюсь кликнуть в самое начало слайдера)
остаётся только lineStart.x, которое берётся из getLocation, которое возвращается с .812725 или подобной ерундой
но на одной странице по итогу кликать нужно на floor, а на другой уже на ceiling, и round тоже стабильного результата не даёт
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
именно эту проблему и пытался разобрать
мне просто кажется странным изначально то, что возвращаются дробные значения
ведь на экране-то их не будет
источник

BO

Boris Osipov in JavaScript testing
господи что ты к дробям прицепился) покажи лучше реальное число "которое возвращается с .812725, " там же наверняка десятки пикселей и хвост в 0.8 просто смех
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
ну в смысле почему я так прицепился
я так прицепился к этому, потому что в этом вся суть и состоит
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
Boris Osipov
господи что ты к дробям прицепился) покажи лучше реальное число "которое возвращается с .812725, " там же наверняка десятки пикселей и хвост в 0.8 просто смех
^ в первом посте было

[0-0] rect: { height: 3, width: 220, x: 754.828125, y: 328 }
источник

BO

Boris Osipov in JavaScript testing
Nikolay Aleksandrovich
^ в первом посте было

[0-0] rect: { height: 3, width: 220, x: 754.828125, y: 328 }
ну а pixelsPerOneValue сколько?
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
это не важно, я кликаю на начало элемента, там учитывается только lineStart.x
источник

BO

Boris Osipov in JavaScript testing
а проблема только на сафари?
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
нет, проблема на всех браузерах
из-за сафари просто приходится browser,performActions использовать
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
но это мелочи
источник

BO

Boris Osipov in JavaScript testing
Nikolay Aleksandrovich
это не важно, я кликаю на начало элемента, там учитывается только lineStart.x
ну так не кликай в край... в чем смысл? даже обычный клик кликает в центр
источник

NA

Nikolay Aleksandrovi... in JavaScript testing
мне кажется, ты невнимательно меня читаешь
при клике в край сбрасывается фильтр
источник