Нажмите на меню, используя идентификатор доступности и ошибку xpath - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь щелкнуть это меню, но я не поднимаю его, драйвер всегда отображает сообщение об ошибке, что элемент не является интерактивным, я пробовал использовать xpath, имя класса и идентификатор доступности,ничего не работает, есть мнения?

id и xPath Меню

dc.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554");
dc.setCapability("platformName", "android");
dc.setCapability("appPackage", "-----------");
dc.setCapability("appActivity", "-------------------");

AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"), dc);

MobileElement el1 = (MobileElement) driver.findElementById("email");
el1.sendKeys("-------");
MobileElement el2 = (MobileElement) driver.findElementById("password");
el2.sendKeys("-------");

driver.pressKeyCode(AndroidKeyCode.BACK);
Thread.sleep(1000);

MobileElement el = (MobileElement) driver.findElementById("email_sign_in_button");
el.click();
driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout[3]/android.widget.TextView[1]\n").click();
Thread.sleep(4000);

MobileElement e13 = (MobileElement) driver.findElementByXPath("//android.widget.ImageButton[@content-desc=\"open_drawer\"]");
e13.click();


* Element info: {Using=accessibility id, value=open_drawer}
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62)
at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
at io.appium.java_client.FindsByAccessibilityId.findElementByAccessibilityId(FindsByAccessibilityId.java:37)
at Medições.main(Medições.java:44)

Ответы [ 3 ]

0 голосов
/ 21 июня 2019

Попробуйте следующие опции, чтобы нажать на элемент.

  • Класс действий
MobileElement e13 = (MobileElement) driver.findElementByXPath("//android.widget.ImageButton[@content-desc='open_drawer']");
Actions builder=new Actions(driver);
builder.moveToElement(e13).click().build().perform();


  • JavaScripts Executor
MobileElement e13 = (MobileElement) driver.findElementByXPath("//android.widget.ImageButton[@content-desc='open_drawer']");     
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", e13);
0 голосов
/ 02 июля 2019

Я смог решить эту проблему после многих усилий, используя этот код:

TouchAction touchAction = new TouchAction(driver).press(PointOption.point(10,100)).moveTo(PointOption.point(200, 100)).release();
    touchAction.perform();

Спасибо за помощь

0 голосов
/ 21 июня 2019

Никогда не используйте Thread.sleep () , это не добавляет никакого значения, но замедляет ваши тесты.

Если вам нужно дождаться загрузки страницы или появления элемента - перейдите к Явное ожидание .В клиентском API Selenium / Appium Java класс, который вы ищете: WebDriverWait

MobileElement e13 = (MobileElement) new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//android.widget.ImageButton[@content-desc=\"open_drawer\"]")));

См. Явное ожидание, пока видимость элемента с помощью драйвера Android в Java статья для получения дополнительной информации.

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