Size: a a a

2020 May 21

KA

Konstantin Art in JS for testing
const parent =
  await browser.$('(//div[@class="main_class"])[1]//ancestor::div[contains(@class, "sub_main_class")]');

const teamOne = await parent.$('/a//div[@class="child_class"][1]');

await teamOne.click();
источник

KA

Konstantin Art in JS for testing
Классы переименованы, но сути не меняют
источник

BO

Boris Osipov in JS for testing
Konstantin Art
const parent =
  await browser.$('(//div[@class="main_class"])[1]//ancestor::div[contains(@class, "sub_main_class")]');

const teamOne = await parent.$('/a//div[@class="child_class"][1]');

await teamOne.click();
/a - будет поиск от рута документа
источник

KA

Konstantin Art in JS for testing
То есть не апендится к паренту?
источник

AP

Alexander Popov in JS for testing
Konstantin Art
const parent =
  await browser.$('(//div[@class="main_class"])[1]//ancestor::div[contains(@class, "sub_main_class")]');

const teamOne = await parent.$('/a//div[@class="child_class"][1]');

await teamOne.click();
есть что то типа xpath-builder or xpather on npm, чтоб не писать вот это все руками
источник

BO

Boris Osipov in JS for testing
Konstantin Art
То есть не апендится к паренту?
так работает xpath... ./ - от элемента / - от рута документа. как напишете так и будет. wdio там не делает ничего лишнего
источник

KA

Konstantin Art in JS for testing
Секунду, сейчас попробую. Очень интересно стало
источник

SM

Sewa Makhinya in JS for testing
Konstantin Art
Ну пример очень примитивный. По факту локаторы пятиэтажные xPath-ы и такая конструкция была бы удобной.
Плюс, имея парень элемент, я безошибочно смогу у него найти еще что-то.
Что мешает перейти на локаторы типа data-test-id, и чтобы они были максимум двухэтажные?
источник

AZ

Andrii Zinchuk in JS for testing
или виучить xpath)
источник

KA

Konstantin Art in JS for testing
Представьте себе таблицу с тысячей дивов с динамическими данными. Дата Id куда ставить и какой?
источник

SM

Sewa Makhinya in JS for testing
Konstantin Art
const parent =
  await browser.$('(//div[@class="main_class"])[1]//ancestor::div[contains(@class, "sub_main_class")]');

const teamOne = await parent.$('/a//div[@class="child_class"][1]');

await teamOne.click();
у меня бы такое не прошло код ревью, это ^^^ не стойко к изменениям вёрстки. что мешает навесить на элемент класс или data-testid?
источник

KA

Konstantin Art in JS for testing
У меня бы тоже не прошло, но есть нюансы
источник

KA

Konstantin Art in JS for testing
Вопрос не в том был как это реализовать, обходов хватает.
источник

SM

Sewa Makhinya in JS for testing
Konstantin Art
Представьте себе таблицу с тысячей дивов с динамическими данными. Дата Id куда ставить и какой?
таблица - частный случай и там нет 5 этажей, там есть row и column
источник

KA

Konstantin Art in JS for testing
Вопрос больше про чейнинг.
источник

AZ

Andrii Zinchuk in JS for testing
Konstantin Art
У меня бы тоже не прошло, но есть нюансы
храни локатори как стринг и передавай в драйвер уже сложений стринг
источник

KA

Konstantin Art in JS for testing
Andrii Zinchuk
храни локатори как стринг и передавай в драйвер уже сложений стринг
Сейчас так и есть. Надёжности не добавляет, но да, это вариант работает
источник

AZ

Andrii Zinchuk in JS for testing
Konstantin Art
Сейчас так и есть. Надёжности не добавляет, но да, это вариант работает
о какой надьожности речь )?
источник

KA

Konstantin Art in JS for testing
Sewa Makhinya
таблица - частный случай и там нет 5 этажей, там есть row и column
Только вложенностей больше
источник

SM

Sewa Makhinya in JS for testing
Konstantin Art
Вопрос больше про чейнинг.
мне такой чейнинг кажется признаком плохого дизайна тестов или приложения
источник