Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Вызов метода помеченного аннотацией @Step (allure) приводит к паденю вызывающего это метод теста если в нём произошло любое исключение.

java
allure
Теги: #<Tag:0x00007f7b651e6328> #<Tag:0x00007f7b651e61e8>

(Vitekes) #1

Всем хорошего дня, у меня появился следующий вопрос.
Мой тест вызывает следующий метод:

@Override
@Step("Проверка: элемент {0} присутствует на экране")
public boolean isElementPresent(AndroidElement element) {
    try {
        element.isDisplayed();
        return true;
    } catch (Exception e){
        return false;
    }
}

Метод отрабатывает возвращая на выходе нужный мне результат. Если возвращается “true” то всё ок. а вот если метод возвращает “false”, то получаю следующий стектрейс:

org.openqa.selenium.NoSuchElementException: Can't locate an element by this strategy: Locator map: 
- native content: "By.xpath: //*[@resource-id='ru.tfw_mob.devtest:id/menu_overflow']" 
- html content: "by id or name "mainMenuBtn""
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.1', revision: 'a36b8b1cd5757287168e54b817830adce9b0158d', time: '2016-06-30 19:26:09'
System info: host: 'vitekes', ip: '192.168.200.1', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_102'
Driver info: driver.version: unknown
    at io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:110)
    at io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:57)
    at io.appium.java_client.android.AndroidElement$$EnhancerByCGLIB$$c898a80.toString(<generated>)
    at java.text.MessageFormat.subformat(MessageFormat.java:1280)
    at java.text.MessageFormat.format(MessageFormat.java:865)
    at java.text.Format.format(Format.java:157)
    at java.text.MessageFormat.format(MessageFormat.java:841)
    at ru.yandex.qatools.allure.aspects.AllureAspectUtils.getTitle(AllureAspectUtils.java:65)
    at ru.yandex.qatools.allure.aspects.AllureStepsAspects.createTitle(AllureStepsAspects.java:70)
    at ru.yandex.qatools.allure.aspects.AllureStepsAspects.stepStart(AllureStepsAspects.java:42)
    at tfw.qa.mobile.core.drivers.commands.DriverCommandsImpl.isElementPresent(DriverCommandsImpl.java:144)
    at tfw.qa.mobile.pages.elements.MainPageElements.isMainMenuOpenerVisible(MainPageElements.java:149)
    at tfw.qa.mobile.pages.android.MainPage.isMainMenuOpenBtnVisible(MainPage.java:29)
    at tfw.qa.mobile.pages.android.LoginPage.logout(LoginPage.java:42)
    at tfw.qa.mobile.demo.BaseTest.tearDownAction(BaseTest.java:60)
...

В данном случае это пример показывающий падение.
Поиск в интернете показал что такого быть в общем-то не должно, по крайней мере есть примеры в которых указан код аналогичный моему.
Поиск по коду аллюра показал две вещи, первая: я не очень хорошо знаю яву, и второе: там выставляются аспекты на каждое брошенное исключение.

Знает ли кто почему происходит то что происходит и как это поправить


(Dmitrii Demin) #2

Ответ в стекрейсе:

  • аллюр пытается подменить {0} элементом (точнее строкой из toString метода элемента)
  • AndroidElement#toString вызывает findElement
  • элемент не найден = эксепшн в Allure aspect агенте

(Bolatbek) #3

isDisplayed() проверяет видимость у найденного элемента, а у вас сам поиск element`а дает ошибку где-то выше.


(Alexander Zvonov) #4

Попробуйте убрать анатацию @Step. Если ничего не измениться, а веротяно так и будет, проблема, как было сказано выше, не в этом куске кода, а там где происходит поиск элемента.


(Dmitrii Demin) #5

Как вариант - переопределите toString у элемента (если это Ваш класс и есть доступ к коду)