java - 如何同时打开浏览器和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.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();
    }
}

这是java中的示例代码,我从这些网站获取了代码Tutorial Appium JavaSelenium ,并设置一个示例,以便更容易理解我想要做什么。

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

最佳答案

您的应用程序是否从您的 Android 应用程序启动 WebView,如您所提到的,“身份验证”,然后您才能对您的应用程序执行任何操作?

我相信 Appium 的设置上下文正是您所需要的,API 可以让您在 native View 和 Web View 之间来回切换,反之亦然。

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

关于java - 如何同时打开浏览器和android并同时运行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59631274/

相关文章:

android - NoClassDefFoundError : com. google.android.gms.analytics.Tracker

java - 如何根据多个分隔符 split() 字符串?

vba - 如何通过Selenium和VBA根据html从第2行第2列中提取文本8

java keytool 给出 "final block not properly padded"

java - 捕获可以匹配多种模式的字符串

java - assert 与 if(var != null) 哪种方式更好或正确?

java - 在 Java 中使用 for 循环,是否必须指定 not null?

Android:AutoCompleteTextView 在没有输入文本时显示建议

android - 操作栏背景颜色?- Play Newstand 应用

java - 从 Eclipse 执行 AutoIt 代码