【问题标题】:Element selection not working hybrid app but working with native app in Appium元素选择不适用于混合应用程序,但可以在 Appium 中使用本机应用程序
【发布时间】:2018-11-12 04:26:08
【问题描述】:

我正在尝试选择一个元素并使用资源 ID 添加点击事件

这是一个使用 ionic 开发的混合应用程序

ui automator selector

其实这是一个标签

tab image

然后我写了这样的代码

package android;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.io.File;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class app { 

public static void main(String[] args) throws Exception
{

      File f= new File("src/123.apk");
      DesiredCapabilities capabilities = new DesiredCapabilities();
      capabilities.setCapability("deviceName", "Galaxy Nexus API 23");
      capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

      capabilities.setCapability("platformName", "Android");
      capabilities.setCapability("unicodeKeyboard", "true");
      capabilities.setCapability("resetKeyboard", "true");
      capabilities.setCapability("newCommandTimeout", "45000");
      capabilities.setCapability("app", f.getAbsolutePath());

      RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 

      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

      driver.findElement(By.id("tab-t0-1")).click();

 }
 }

appium error log

我也添加了 xpath 方法

driver.findElement(By.xpath("//android.widget.TabWidget/android.view.View[1][@resource-id='tab-t0-1']")).click();

但显示没有找到元素错误,实际上相同的代码与具有不同资源 - id 的本机应用程序一起使用

这里有什么问题,请帮忙

【问题讨论】:

  • 你在哪里添加了上面提到的 xpath ?你也可以分享 HTML 吗?
  • 什么 html?我没有得到你

标签: selenium selenium-webdriver appium appium-android


【解决方案1】:

您必须将上下文更改为混合模式:

private boolean changeContext(String context) {
    boolean changeFlag = false;
    if (StringUtils.containsIgnoreCase(context, "Native")) {
        context = "Native";
    } else if (StringUtils.containsIgnoreCase(context, "Hybrid")) {
        context = "WEBVIEW_com";
    }
    if (StringUtils.containsIgnoreCase(driver.getContext(), context)) return false;
    Set<String> contextName = driver.getContextHandles();
    for (String contexts : contextName) {
        if (StringUtils.containsIgnoreCase(contexts, context)) {
            driver.context(contexts);
            changeFlag = true;
            break;
        }
    }
    return changeFlag;
}

【讨论】:

  • 感谢您的回复,找到并更改我的上下文如下driver.context("WEBVIEW_io.ionic.starter"); driver.findElementByName("information circle About").click(); 然后尝试单击此,但仍然出现错误Failed to start Chromedriver session: A new session could not be created. (Original error: session not created exception: Chrome version must be &gt;= 60.0.3112.0
猜你喜欢
  • 2015-12-20
  • 2016-11-03
  • 2015-09-27
  • 2017-05-07
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
相关资源
最近更新 更多