Java 如何同时打开浏览器和android并同时运行测试?

Java 如何同时打开浏览器和android并同时运行测试?,java,android,selenium,appium,appium-android,Java,Android,Selenium,Appium,Appium Android,我有一个测试场景,如下所示,我使用appium在android上启动应用程序,然后我需要打开浏览器来验证一些东西,然后我需要返回android。如何完成这个过程?我想到了使用多线程 import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver; import org.openqa.selenium.By; import org.openqa.selenium.remot

我有一个测试场景,如下所示,我使用appium在android上启动应用程序,然后我需要打开浏览器来验证一些东西,然后我需要返回android。如何完成这个过程?我想到了使用多线程

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;


import java.net.MalformedURLException;
import java.net.URL;

public class ioSampleTest {

    public AndroidDriver<MobileElement> driver;
    public WebDriverWait wait;

    //Elements
    String secondNewJob = "//android.widget.FrameLayout[2]/android.widget.LinearLayout/" +
            "android.widget.RelativeLayout/android.widget.ImageView";

    @BeforeMethod
    public void setup () throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName", "Galaxy Nexus API 24");
        caps.setCapability("udid", "emulator-5554"); //DeviceId from "adb devices" command
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "7.0");
        caps.setCapability("skipUnlock","true");
        caps.setCapability("appPackage", "com.isinolsun.app");
        caps.setCapability("appActivity","com.isinolsun.app.activities.SplashActivity");
        caps.setCapability("noReset","false");
        driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"),caps);
        wait = new WebDriverWait(driver, 10);
    }


    @Test
    public void basicTest () throws InterruptedException {
        //Click and pass Splash
        wait.until(ExpectedConditions.visibilityOfElementLocated
                (By.id("com.isinolsun.app:id/animation_view"))).click();

        //Click I am searching a job
        wait.until(ExpectedConditions.visibilityOfElementLocated
                (By.id("com.isinolsun.app:id/bluecollar_type_button"))).click();


        //Notification Allow
        if (driver.findElements(By.id("com.android.packageinstaller:id/permission_allow_button")).size()>0) {
            driver.findElements(By.id("com.android.packageinstaller:id/permission_allow_button")).get(0).click();
        }

        WebDriver browserFireFox = new FirefoxDriver();
             try {
              browserFireFox.get("https://google.com/ncr");
              browserFireFox.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
            WebElement firstResult = wait.until(presenceOfElementLocated(By.cssSelector("h3>div")));

            System.out.println(firstResult.getAttribute("textContent"));
                } finally {
                    browserFireFox.quit();
                }

        wait.until(ExpectedConditions.visibilityOfElementLocated
                (By.xpath(secondNewJob)));
    }

    @AfterMethod
    public void teardown(){
        driver.quit();
    }
}
import io.appium.java\u client.MobileElement;
导入io.appium.java_client.android.AndroidDriver;
导入org.openqa.selenium.By;
导入org.openqa.selenium.remote.DesiredCapabilities;
导入org.openqa.selenium.support.ui.ExpectedConditions;
导入org.openqa.selenium.support.ui.WebDriverWait;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.testng.annotations.AfterMethod;
导入org.testng.annotations.BeforeMethod;
导入org.testng.annotations.Test;
导入java.net.MalformedURLException;
导入java.net.URL;
公共类ioSampleTest{
公共AndroidDriver;
公共网络驱动器,它等待;
//元素
String secondNewJob=“//android.widget.FrameLayout[2]/android.widget.LinearLayout/”+
“android.widget.RelativeLayout/android.widget.ImageView”;
@预处理法
public void安装程序()引发了畸形的DurException{
DesiredCapabilities=新DesiredCapabilities();
caps.setCapability(“deviceName”、“Galaxy Nexus API 24”);
caps.setCapability(“udid”,“emulator-5554”);//来自“adb设备”命令的DeviceId
caps.setCapability(“平台名”、“安卓”);
caps.setCapability(“平台版”、“7.0”);
caps.setCapability(“skipUnlock”、“true”);
caps.setCapability(“appPackage”、“com.isinolsun.app”);
caps.setCapability(“appActivity”、“com.isinolsun.app.activities.SplashActivity”);
上限设定能力(“noReset”、“false”);
驱动程序=新的AndroidDriver(新的URL(“http://127.0.0.1:4723/wd/hub"(大写),;
等待=新的WebDriverWait(驱动程序,10);
}
@试验
public void basicTest()抛出InterruptedException{
//单击并传递飞溅
等待。直到(预期条件。元素的可见性已找到)
(By.id(“com.isinolsun.app:id/animation_view”))。单击();
//单击“我正在搜索工作”
等待。直到(预期条件。元素的可见性已找到)
(By.id(“com.isinolsun.app:id/bluecollar_type_button”))。单击();
//通知允许
if(driver.findElements(By.id(“com.android.packageinstaller:id/permission\u allow\u button”)).size()>0){
driver.findElements(By.id(“com.android.packageinstaller:id/permission\u allow\u button”)).get(0)。单击();
}
WebDriver browserFireFox=新的FirefoxDriver();
试一试{
browserFireFox.get(“https://google.com/ncr");
browserFireFox.findElement(By.name(“q”)).sendKeys(“cheese”+Keys.ENTER);
WebElement firstResult=wait.until(存在元素定位(By.cssSelector(“h3>div”));
System.out.println(firstResult.getAttribute(“textContent”);
}最后{
browserFireFox.quit();
}
等待。直到(预期条件。元素的可见性已找到)
(By.xpath(secondNewJob));
}
@后置法
公共无效拆卸(){
driver.quit();
}
}
这是java中的一个示例代码,我从这些站点获取了代码,并设置了一个示例,使我更容易理解我想要做什么


请注意,代码可能不起作用,这只是一个示例。

您的应用程序是否在对应用程序执行任何操作之前,将WebView从android应用程序启动到您所提到的“身份验证”

我相信Appium的设置上下文是您所需要的,api将允许您从本机切换到webview,反之亦然

但是,如果您坚持要通过appium进行测试,同时使用selenium对桌面浏览器进行测试,那么这是不可能的