#javascript #protractor
#javascript #транспортир
Вопрос:
<div class="MuiGrid-root jss48321 MuiGrid-item MuiGrid-grid-xs-12 MuiGrid-grid-sm-3 MuiGrid-grid-md-3 MuiGrid-grid-lg-3 MuiGrid-grid-xl-3">
<h4 class="MuiTypography-root jss48324 MuiTypography-h4">Decks</h4>
<button class="MuiButtonBase-root MuiFab-root jss48323 MuiFab-sizeSmall MuiFab-primary" tabindex="0" type="button" aria-label="add" title="Add">
<span class="MuiFab-label">
<svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
<path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
</svg>
</span>
<span class="MuiTouchRipple-root"></span>
</button></div>
Поскольку это приложение react js, я добавил
browser.waitForAngularEnabled(false);
Здесь я хотел нажать на значок добавления ( )
Мой тестовый скрипт. элемент(by.css(‘svg[class=»MuiSvgIcon-root»]’)).click();
Вывод: сбой: элемент не найден с помощью локатора: By(css selector, svg[class="MuiSvgIcon-root"])
Может кто-нибудь, пожалуйста, помочь мне в решении этой проблемы.
Комментарии:
1. есть ли iframe на вашей странице
2. Нет, нет iframe
Ответ №1:
попробуйте это
it('test case', async () => {
let plusIcon = element(by.css('svg[class="MuiSvgIcon-root"]'))
await browser.waitForAngularEnabled(false);
// your steps prior to click
await browser.wait(
ExpectedConditions.presenseOf(plusIcon),
15000
);
await plusIcon.click();
});
Комментарии:
1. предлагается использовать visiblityof вместо presenseOf поскольку presenseOf означает «Ожидание проверки присутствия элемента в DOM страницы. Это не обязательно означает, что элемент виден.»если не виден, значит, не доступен для просмотра
2. Привет @ Sergey pleshakov, получаю сообщение об ошибке (сбой: ExpectedConditions.presenseOf не является функцией) после попытки с вашим кодом.
3. Я полагаю, вы знаете, как импортировать недостающие пакеты
4. я не знаю об этом, можете ли вы, пожалуйста, помочь мне в этом
Ответ №2:
Предполагая, что ваше приложение не использует iFrame.
пожалуйста, попробуйте следующий код:
onPrepare: function() {
browser.manage().window().setSize(1920, 1080);
}
describe('Click plusIcon', () => {
it('Click PlusIcon', async () => {
let plusIcon = element(by.css('svg[class="MuiSvgIcon-root"]'))
const EC = protractor.ExpectedConditions;
var a = await browser.wait(EC.visibilityOf(plusIcon), 90000);
console.log("the value of a is:", a);
await plusIcon.click();
});
});
давайте найдем актуальную проблему здесь.
Сначала давайте выведем значение a .
если a имеет значение true, то отображается plusIcon . И, если вы получаете сообщение об ошибке из-за того, что не нажимаете кнопку, вам нужно либо развернуть браузер, либо перейти к кнопке.
если a равно false, то plusIcon еще не виден. Либо нам нужно подождать еще некоторое дополнительное время.
Комментарии:
1. Привет, @ Kishor sharma, получаю сообщение об ошибке (SyntaxError: await допустимо только в асинхронной функции) после попытки с вашим кодом
2. @ramarajuvarma извините, я ожидал, что у вас есть функция описания и ит. Я обновил ответ
3. Привет @Kisore sharma теперь я получаю сообщение «Ошибка: Ошибка: описание ожидает аргумент функции; получено [объект AsyncFunction]» после выполнения вышеупомянутого кода
4. @ramarajuvarma вы попробуете удалить асинхронность из функции описания? Я предполагаю, что вы импортировали необходимые зависимости. Для получения дополнительной информации jasmine.github.io/tutorials/async
5. я удалил асинхронность из функции описания. ошибка получения (сбой: перехвачен щелчок элемента: Элемент <svg class=»MuiSvgIcon-root» focusable=»false» viewBox=»0 0 24 24″ aria-hidden=»true»> … </svg> не доступен для просмотра в точке (36, 32). Другой элемент получит щелчок: <div style=»отображение: flex; выравнивание-содержимое: по центру; выравнивание-элементы: по центру; ширина: 100%; высота: 100%; положение: фиксированное; вставка: 0 пикселей; цвет фона: rgba(0, 0, 0, 0); z-index: 11111;»>…</div>). я не импортировал никаких зависимостей. я посмотрю на ссылку, которой вы поделились. Спасибо!