Нажатие на «ion-переключатель» с помощью appium

#ionic-framework #appium #appium-android

#ионный фреймворк #appium #appium-Android

Вопрос:

Я не могу активировать <ion-toggle> кнопку с помощью клиента appium / python.

Вот шаблон HTML:

 <ion-toggle id="testaut_useauth_toggle" 
            ng-change="toggleAuth()" 
            ng-model="wizard.useauth" 
            toggle-class="toggle-calm">{{'kWizUseAuth' |
          translate}}
</ion-toggle>
  

Мой appium test.py код:

 self.click_item("testaut_useauth_toggle")
def click_item(self,id, wait=5):
        element = self.driver.find_element_by_id(id)
        element.click()
        sleep(wait)
  

Ошибка, которую я получаю:

 selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: unknown error: Element <div class="item item-toggle toggle-small ng-not-empty ng-valid" id="testaut_useauth_toggle" ng-change="toggleAuth()" ng-model="wizard.useauth" toggle-class="toggle-calm" style="">...</div> is not clickable at point (180, 190). Other element would receive the click: <section ng-show="selected" ng-class="{current: selected, done: completed}" class="step current" ng-transclude="" wz-title="2" style="">...</section>
  (Session info: chrome=55.0.2883.91)
  

«Другой элемент», «wz-title» — это, по сути, шаблон angular wizard, который я использую. Он используется моим приложением и на других экранах, и у меня нет проблем с нажатием кнопок, поэтому проблема связана с этим переключателем (который ionic реализует как флажок)

Альтернативный подход, который я пробовал и потерпел неудачу:

 def tap_item(self,id,wait=5):
        print ('Tapping item: {}'.format(id))
        element = self.driver.find_element_by_id(id)
        #self.driver.execute_script("arguments[0]).click();", element);
        self.driver.execute_script("document.getElementById(arguments[0]).click();", id);
  

Здесь нет ошибки, но она не активируется

Любая помощь была бы оценена.

Учитывая, что это веб-приложение, я не могу получить какое-либо местоположение. Tap не работает, потому что метод не реализован для WebView

Ответ №1:

Нашел решение, изучив, как была реализована <ion-toggle> кнопка, и немного поэкспериментировав с тем, какой элемент должен быть целью нажатия

Окончательное решение:

 def tap_toggle(id,wait=Wait.TOGGLE):
    element = driver.find_element_by_id(id)
    element = element.find_element_by_tag_name('label')
    element.click()
    sleep(wait)
  

Также пересечение опубликовано на https://github.com/appium/python-client/issues/340