#locate #codeceptjs
#найдите #codeceptjs
Вопрос:
Я пытался использовать Locator Builder (https://codecept.io/locators/#locator-builder ) и заметил, что когда я использую withAttr, он выполняет равное сравнение
Пример: locate('a').withAttr({href: '/order/offer/'})
Переводится как: .//a[@href = '/order/offer']
Я рассматривал вариант, в котором withAttr переводится как сравнение «содержит».
Пример: .//a[contains(@href, '/order/offer')]
Поскольку href имеет динамическое значение в конце, мне пришлось использовать «contains» в моем xpath. Хотелось бы знать, есть ли аналогичная опция с Location Builder
Примечание: я видел, что withText выполняет сравнение contains
Ответ №1:
вы можете использовать что-то вроде
locate('a[href^='/order/offer/']')
Это приведет к
.//a[starts-with(@href,'/order/offer')]
Ответ №2:
Нет, вы не можете сделать это с помощью locator builder, поскольку только разработчики этой функции могут определить, как она работает. Вы можете выполнить запрос функции, но, по моему опыту, эта функция широко не используется, поэтому, скорее всего, они не улучшат ее или не создадут новую команду.
Ответ №3:
Вероятно, вы ищете пользовательские локаторы.
// inside a plugin or a bootstrap script:
codeceptjs.locator.addFilter((providedLocator, locatorObj) => {
if (typeof providedLocator === 'string') {
// this is a string
if (providedLocator[0] === '=') {
locatorObj.value = `.//*[text()="${providedLocator.substring(1)}"]`;
locatorObj.type = 'xpath';
}
}
});
Это переводится как:
I.click('=Login');
Вы можете быть довольно изобретательны с этим.