Я пытаюсь нажать кнопку со следующей строкой:
await page.getByRole('button', { name: '3 Employees' }).click();
Моя проблема в том, что имя кнопки меняется в зависимости от количества сотрудников, поэтому она не будет работать, если значение жестко запрограммировано. Я бы использовал метод локатора только со словом «Сотрудники», но он будет соответствовать другой кнопке с тем же локатором и тем же текстом «Сотрудники», и я также хотел бы избежать использования метода nth().
Что я действительно хочу сделать, так это использовать свою строку кода, но искать только часть «Сотрудники», то есть я хочу включить пробел между 3 и «Сотрудники». Или в этом случае есть какой-то способ проверить 3 как любое случайное значение, например «{randomvalue} Сотрудники»?
Пожалуйста, поделитесь немного больше контекста. Часто лучший способ выбора элемента зависит от его родительского дерева и других подобных элементов в документе. Но да, {name: /^\d+ employees$/}
может подойти именно для этого элемента.
Использование регулярного выражения должно работать для этой конкретной кнопки, при условии, что на странице нет других элементов /^\d+ Employees$/
:
import {expect, test} from "@playwright/test"; // ^1.42.1
const html = `<!DOCTYPE html><html><body>
<button></button>
<script>
setTimeout(() => {
document.querySelector("button").textContent =
~~(Math.random() * 100) + " Employees";
}, 3000);
</script>
</body></html>`;
test("{n} Employees button can be clicked", async ({page}) => {
await page.setContent(html);
await page.getByRole("button", {name: /^\d+ Employees$/}).click();
});
Обратите внимание на привязки ^
и $
, что делает их точным совпадением (кроме начальных/конечных пробелов). Если вы хотите использовать совпадение подстроки, опустите эти привязки.
Если есть другие элементы, соответствующие этому, вы, вероятно, захотите рассмотреть возможность использования родительской цепочки для изоляции конкретной кнопки, а не использования first/last/nth, чего вы правильно хотите избежать.
Наконец, если есть способ гарантировать, что страница отображает определенное количество сотрудников, я бы воспользовался этим. Я бы использовал приведенный выше код только в том случае, если действительно не существует хорошего способа более предсказуемого управления страницей.
что касается регулярного выражения, вы можете использовать
\d+ Employees
. См.: regex101.com/r/xoCPlV/latest