Невозможно выбрать элемент, который уже находится в элементе в appium (python selenium) - PullRequest
0 голосов
/ 11 ноября 2019

Я автоматизирую страницу входа в Android-приложении, прямо рядом с текстовым полем имени пользователя, есть возможность выбора региона страны перед входом в систему.

Что я пытаюсь сделать:

Попытка нажать на элемент флага страны , а затем откроется страница, чтобы выбрать страну для входа в систему.

Что я сделал:

В Appium, выбрав элемент флага, имя пользователяили раздел адреса электронной почты выбирается. и, следовательно, отображается идентификатор элемента для имени пользователя, и поэтому я выбрал раздел флага, используя координаты, но то, что происходит, работает для меня, но проблема в устройствах Android с другим размером экрана, он не может найти этот элемент в тех же координатах.

Код: TouchAction(driver).tap(None, 651, 796, 1).perform()

что мне делать в этом случае? есть мысли?

enter image description here

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Попробуйте код ниже и, соответственно, вам нужно сделать математику координат X & Y

        MobileElement element = (MobileElement) driver.findElementByXPath("//*[@name=Username or email adddress]");
        int y_coodinate = (element.getLocation().getY() + element.getLocation().getY() + element.getSize().height) / 2;
        int x_coodinate = element.getLocation().getX() + element.getSize().width - (element.getLocation().getX() + element.getLocation().getX() + element.getSize().width) / 10;
        new TouchAction(driver).longPress(PointOption.point(x_coodinate, y_coodinate)).release().perform();
0 голосов
/ 11 ноября 2019

Это из-за иерархии элементов на странице.

Вы пытаетесь нажать на позицию, хорошо, но в действительности происходит то, что AutoItor UI (или другие драйверы, которые вы используете) можетнажмите на другой элемент макета, который не виден вам.

Решение:

Вы должны найти полную иерархию xpath, а затем выполнить действие с ней.

driver.findElement(By.xpath("*{your elements full hierarchy XPATH}*")).getText();

например:

driver.findElement(By.xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.support.v4.widget.i[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.support.v4.view.ViewPager[1]/android.view.ViewGroup[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[2]/android.widget.TextView[2]")).getText();

Для этого я использую и предлагаю Katalon Studio> Инструменты шпиона (вместо инструментов UiAutomator2 из Android SDK).

Вот скриншот инструмента Katalon Studio Spy. (Значение адреса XPATH может быть легко скопировано, я просто навесил его, чтобы показать, что я говорю.)

enter image description here

Надеюсь, это поможет.

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