testplane icon indicating copy to clipboard operation
testplane copied to clipboard

Not working wdio expect

Open ant1dot opened this issue 4 years ago • 5 comments

Not working wdio expect in hermione https://webdriver.io/docs/api/expect-webdriverio const assert = require('chai').assert; require('expect-webdriverio');

global.browser describe('yandex', async function() { it('search', async function() { await this.browser.url('https://ya.ru/'); await expect(this.browser.$('#text')).toBeDisplayed() }); });

error: chrome ✘ ReferenceError: browser is not defined at Object.toBeDisplayedFn (C:\work\hermione-example\node_modules\expect-webdriverio\lib\matchers\element\toBeDisplayed.js:8:5) at Object.runJestExpect (C:\work\hermione-example\node_modules\expect-webdriverio\lib\util\expectAdapter.js:10:15) at Object.toBeDisplayed (C:\work\hermione-example\node_modules\expect-webdriverio\lib\matchers\element\toBeDisplayed.js:21:38) at EXTERNAL_MATCHER_TRAP (C:\work\hermione-example\node_modules\expect\build\index.js:386:30) at Object.throwingMatcher [as toBeDisplayed] (C:\work\hermione-example\node_modules\expect\build\index.js:387:15) at Object. (C:\work\hermione-example\tests\desktop\test_jc.js:13:47) at processTicksAndRejections (internal/process/task_queues.js:95:5)

ant1dot avatar Oct 29 '21 07:10 ant1dot

Hello.

Look at examples here - https://webdriver.io/docs/api/expect-webdriverio/. You should rewrite your code like this:

it('search', async function() {
  await this.browser.url('https://ya.ru/');
  const elem = await this.browser.$('#text');
  await expect(elem).toBeDisplayed()
});

DudaGod avatar Oct 29 '21 07:10 DudaGod

Хочу добавить что у меня такая же проблема. Это связано с тем, что expect-webdriver берет browser из глобальной области видимости, из-за этого browser is not defined https://github.com/webdriverio/expect-webdriverio/blob/dd3d2c0c5960cc7bedad7894a30508bb79c99e67/src/matchers/element/toBeDisplayed.ts#L7

Но при этом матчеры для browser работают нормально, так как там browser берется из аргументов https://github.com/webdriverio/expect-webdriverio/blob/dd3d2c0c5960cc7bedad7894a30508bb79c99e67/src/matchers/browser/toHaveTitle.ts#L4

Есть какое-то решение? Можно перед тестом делать global.window = this.window, но кажется что это может быть небезопасно из-за параллельного выполнения тестов

Nio-o avatar Nov 16 '21 18:11 Nio-o

@DudaGod привет Если не трудно, скажи, пожалуйста, используется ли у вас expect-webdriverio или его какой-то аналог для утверждений по типу: "имеет атрибут", "находится во вьюпорте"? Есть идея писать кастомные команды гермионы вместо expect-webdriverio, чтобы не заморачиваться с решением этой проблемы

Nio-o avatar Nov 17 '21 14:11 Nio-o

Привет.

В наших проектах мы используем assert из chai и дефолтные команды из API wdio. Чтобы определить имеет ли элемент аттрибут необходимо использовать команду - getAttribute. А для проверки, что элемент находится во вьюпорте используем - isDisplayedInViewport.

Есть какое-то решение? Можно перед тестом делать global.window = this.window, но кажется что это может быть небезопасно из-за параллельного выполнения тестов

Я внимательнее не успел посмотреть, но по коду который ты прислал выглядит действительно довольно странно. И похоже правильное решение это занести PR в expect-webdriverio с исправлением.

DudaGod avatar Nov 17 '21 15:11 DudaGod

@ant1dot Создал issue в expect-webdriver, если это можно исправить без ломающих изменений, то закину туда пулл реквест

https://github.com/webdriverio/expect-webdriverio/issues/601

Nio-o avatar Nov 17 '21 15:11 Nio-o

С версии 5.6.0 expect-webdriverio приезжает из коробки

sipayRT avatar Mar 15 '23 09:03 sipayRT