尝试使用资源ID
选择元素并添加点击事件这是一个以离子开发的混合应用程序
实际上这是一个标签
然后我写了这样的代码
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();
}
}
我还添加了xpath方法
driver.findElement(By.xpath("//android.widget.TabWidget/android.view.View[1][@resource-id='tab-t0-1']")).click();
但显示没有找到元素错误,实际上相同的代码使用具有不同资源的本机应用程序 - id
这里有什么问题,请帮忙
答案 0 :(得分:0)
您必须将上下文更改为混合模式:
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;
}