Appium не может идентифицировать элементы на экране, даже если они были инициализированы с помощью initElements - PullRequest
0 голосов
/ 02 мая 2019

Сценарий:

Я запускаю приложение на реальном устройстве Делать логин Посадка на домашний экран Элементы домашнего экрана не распознаются приложением в устройстве ANDROID. Я попытался нажать на значок справки в правом верхнем углу.

Примечание , что выполнение действий над любым элементом Начального экрана прерывисто

Что я пробовал: - Ввод ожидания после того, как я войду. - возвращение объекта домашней страницы после того, как я войду - больше ждать, прежде чем я использую initElements для инициализации объектов домашней страницы - внутри конструктора домашней страницы я попытался findElementsById, findElementById, я попытался поставить динамическое ожидание элемента перед вызовом initElements - перепробовал идентификаторы для всех элементов - попробовал xpath для всех элементов - попытался убить приложение и перезапустить приложение и снова попытался определить элементы - попробовал JavascriptExecutor - Пробовал метод нажатия

// Ниже представлен конструктор экрана объекта домашней страницы, который вызывается после входа в систему.

public HomePageObjectsNew(Config testConfig) {
        this.testConfig = testConfig;       
        PlatformName = testConfig.getRunTimeProperty("platformNameMobile");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

List<MobileElement> abc= MobileActions.findElementsById(testConfig, "frag_home_help_imgview_id");
testConfig.logComment(Integer.toString(abc.size()));
        PageFactory.initElements(new AppiumFieldDecorator(testConfig.driver, 5, TimeUnit.SECONDS), this);

    }

//*Login Method:*
public HomePageObjectsNew loginFlowUsingPassword() {
        swipeWalkthroughScreens();
        enterAlreadyExistingEmailID("coios6@yopmail.com");
        Browser.wait(testConfig, 2);
        MobileActions.waitForVisibility(testConfig, txtFldPassword, 
        "Password field");
        enterPassword();
        clickOnLogin();
        Browser.wait(testConfig, 4);
        return new HomePageObjectsNew(testConfig);

    }

//*My test case:*
@Test(description = "Verify successful Login of an existing now merchant using password flow", dataProvider = "GetMobileTestConfig", timeOut = 700000)
    public void verifyPaymentRequestButtonIsClickableAfterLogin(Config testConfig) {
        try {
            LoginSignUpPageObjects loginSignUpPageObjects = new LoginSignUpPageObjects(testConfig);
            HomePageObjectsNew obj = loginSignUpPageObjects.loginFlowUsingPassword();
            obj.btnHelpScreenHeader.click();
            MobileActions.goBack(testConfig);
            obj.clickOnHamburgerMenu();
            Browser.wait(testConfig, 2);
            obj.clickOnHamburgerMenu();
            loginSignUpPageObjects.clickOnRequestPayment();
            System.out.println("Request Button clicked");
        } catch (Exception e) {
            testConfig.logFail("verifyPaymentRequestButtonIsClickableAfterLogin failed !!");
            e.printStackTrace(System.out);
        }
    }

**Actual:** Not able to click on Home screen elements 
So if i try 10 times only 1 time it works ... NOTE that id's are not dynamic have already confirmed with DEV !!

**Expected:** I should be able to click on home page elements

Журналы Appium: [MJSONWP (6fbddb32)] Вызов AppiumDriver.findElements () с аргументами: ["id", "com.payu.payunow: id / frag_home_help_imgview_id", "6fbddb32-3ee5-4237-beee-c0496d88e69e"] [BaseDriver] Допустимые стратегии локатора для этого запроса: xpath, id, имя класса, идентификатор доступности, -android uiautomator [BaseDriver] Ожидание до 5000 мс для условия [AndroidBootstrap] Отправка команды на android: {"cmd": "action", "action": "find", "params": {"стратегии": "id", "селектор": "com.payu.payunow: id / frag_home_help_imgview_id», "контекст": "", "несколько": истинно}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Получены данные от клиента: {"cmd": "action", "action": "find", "params": {"стратегии": "id", "селектор": " com.payu.payunow: идентификатор / frag_home_help_imgview_id», "контекст": "", "несколько": истинно}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Получил команду типа ACTION [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Получено действие команды: найти [AndroidBootstrap] [BOOTSTRAP LOG] [отладка] Поиск 'com.payu.payunow: id / frag_home_help_imgview_id' с использованием 'ID' с contextId: '' multiple: true [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Использование: UiSelector [RESOURCE_ID = com.payu.payunow: id / frag_home_help_imgview_id] [AndroidBootstrap] [Журнал BOOTSTRAP] [отладка] Селектор getElements: UiSelector [RESOURCE_ID = com.payu.payunow: id / frag_home_help_imgview_id] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Элемент [] имеет значение null: (0) [AndroidBootstrap] [BOOTSTRAP LOG] [отладка] getElements tmp селектор: UiSelector [INSTANCE = 0, RESOURCE_ID = com.payu.payunow: id / frag_home_help_imgview_id] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Не удалось найти элемент. Очистка кеша доступности и повторная попытка. [AndroidBootstrap] [BOOTSTRAP LOG] [отладка] Поиск 'com.payu.payunow: id / frag_home_help_imgview_id' с использованием 'ID' с contextId: '' multiple: true

1 Ответ

0 голосов
/ 03 мая 2019

Попробуйте подождать, пока элемент не будет включен.Вы можете использовать класс WebDriverWait .wait.until(ExpectedConditions.elementToBeClickable(<element_locator>), <your_timeout>));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...