Не удается щелкнуть по элементу

#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>). я не импортировал никаких зависимостей. я посмотрю на ссылку, которой вы поделились. Спасибо!