$(…).Родительский элемент не является функцией — проблема ввода-вывода WebDriver / машинописи

#typescript #webdriver-io

#машинописный текст #webdriver-io

Вопрос:

Ладно, цель проста. Мне нужно подняться от корня, чтобы поймать его родителя, и из документации webdriver это должно выглядеть так более менее:

 it('should get class from parent element', async () =gt; {  const elem = await $('p');  const parent = await elem[2].parentElement();  console.log(await parent.getAttribute('class')); // outputs: "parent" });  

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

 public isErrorDisplayed(): boolean {  const parent = browser.call(async () =gt; {  return await $(this.root).parentElement();  });   return parent.getAttribute("class").includes("Mui-error");  }  

Мне пришлось обернуть parentElement() , потому что компилятор утверждал, что он вернет Promiselt;WebDriver.IOgt; , что было бы прекрасно, если бы он не был в @wdio/sync режиме! Так что в этом не async/await должно быть необходимости.

Я применил «обходной путь», а затем он говорит, что:

$(...).parentElement is not a function

что на самом деле видно и предлагается vs-кодом.

Использование node 14.17.1 которого должно поддерживать @wdio/sync режим и четко согласуется с остальной частью кода : )

Ответ №1:

Не уверен, почему вы столкнулись с этой проблемой,

Однако существует простая сокращенная альтернатива для получения родителя с помощью xpath

 const elem = await $('p'); const parent = await elem[2].$('..');  

Комментарии:

1. да, я сделал это так, но все равно довольно странно, почему такая простая функция работает не так, как описано в документации

Ответ №2:

 describe('My Login application', () =gt; {  it('should login with valid credentials', async () =gt; {  await browser.url('https://the-internet.herokuapp.com/login');   await $('#username').parentElement();  }); });  

Документ предназначен для асинхронности , v7 приведенный выше код работает так, как ожидалось, для синхронизации вам не нужно ждать

 it('should get class from parent element', () =gt; {  const elem = $('p');  const parent = elem[2].parentElement()  console.log(parent.getAttribute('class')); // outputs: "parent" });  

.