当前位置: 首页 > 知识库问答 >
问题:

Appium:如何在移动应用程序中从本机应用程序切换到移动Web浏览器,并在移动设备中的浏览器上运行URL

百里业
2023-03-14

我有一个原生的移动应用程序,并通过使用Appium驱动程序(AppiumDriver driver)自动运行,该驱动程序工作正常,并通过应用程序的一个功能,例如解锁帐户,向用户发送电子邮件,需要用户确认。

所以我已经找到了如何获得电子邮件中的链接,以及如何从发送电子邮件中获得URL。(保存在字符串变量中,例如“href”)

所以当自动化运行时,我在“信息”窗口中的移动应用程序中,通知用户我们已发送电子邮件进行确认。现在我的问题是

> < li>

如何从本机移动应用程序(屏幕信息)切换并将URL放入浏览器,然后在浏览器中打开一个窗口,要求用户输入新密码并重复,然后按“确定”?之后,我应该再次回到移动应用程序。

切换后,我是否需要另一个驱动程序(如 Web 驱动程序(上面提到的 appium 驱动程序的附加驱动程序)来处理浏览器中的操作?

感谢任何支持

这是我的能力:

public AppiumDriver<MobileElement> driver;

.....

public DesiredCapabilities cap = new DesiredCapabilities();

.....

            cap.setCapability("deviceName", helper.getConfiguration(configFileName, "androidDeviceName"));
            cap.setCapability("platformName", helper.getConfiguration(configFileName, "androidPlatformName"));
            cap.setCapability("PlatformVersion", helper.getConfiguration(configFileName, "androidPlatformVersion"));
            cap.setCapability("automationName", "uiautomator2");

            cap.setCapability("MobileCapabilityType.FULL_RESET", android_mct_fullReset);
            cap.setCapability("MobileCapabilityType.NO_RESET", android_mct_noReset);
            cap.setCapability("appium-version", helper.getConfiguration(configFileName, "appiumVersion"));
            cap.setCapability("language", helper.deviceLanguage);
            cap.setCapability("locale", helper.deviceLocale);
            cap.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, "true");
            cap.setCapability("app", app.getAbsolutePath());

....

        driver = new AppiumDriver<MobileElement>(new URL("http://localhost:4723/wd/hub"), cap);

共有2个答案

邵弘伟
2023-03-14

>

  • 您可以使用 Activity 类启动另一个应用程序,使用 AndroidDriver.startActivity() 函数,如下所示:

    Activity activity = new Activity("activity.package", "activity.name");
    activity.setStopApp(false);
    ((AndroidDriver<MobileElement>) driver).startActivity(activity);    
    

    一种更简单的方法是通过SeeTest Appium扩展获取Launch命令,例如:

    seetest.launch("activity.name", false, false);  
    

  • 万俟玉书
    2023-03-14

    我认为这将通过以下方式实现:

    driver.startActivity(new Activity("com.example", "ActivityName"));
    

    导入方式 :

    import io.appium.java_client.android.Activity;
    

    使用此方法您可以切换应用程序,您必须知道您拥有的APP_PACKAGEAPP_ACTIVITY,尝试此链接或此链接以了解此内容。

    这是来自play store的APP_PACKAGEAPP_ACTIVITYgoogle chrome浏览器示例

    driver.startActivity(new Activity("com.android.chrome", "com.google.android.apps.chrome.Main"));
    

    您不需要为<code>浏览器

    Your native apps start here
    ...
    
    Switch to browser
    
    //example chrome
    driver.startActivity(new Activity("com.android.chrome", "com.google.android.apps.chrome.Main"));
    ....
    
    //back to last activity your native app
    driver.startActivity(new Activity("yourAPP_PACKAGE", "yourAPP_ACTIVITY"));
    
     类似资料:
    • 我有两个应用程序需要通过深层链接进行通信:Flutter Web应用程序和iOS上的Flutter移动应用程序。 基本上,流程需要是我单击在移动浏览器上运行的Web应用程序中的一个按钮,然后应该触发移动应用程序启动。 我遵循了设置深度链接的指定说明,并有两个观察结果: 一切都在Android上完美运行。 如果我在任何其他iOS应用程序(日历,MS Teams等)中点击链接,它就可以正常工作。这使我

    • 在ReactJS中,是否有一种方法可以确定网站是在移动端还是桌面端被浏览?因为,根据我想要呈现的设备不同。 谢谢

    • 我想在Android上使用Appium来自动化下面的场景 首先在Chrome中打开一个网页。网页包含注册表单 填写表单,然后单击提交按钮 提交按钮通过uri打开我的本机应用程序(与我们通过点击链接市场打开Google Play的行为相同://...) 最后与应用程序交互 我可以为第1到3步实现自动化,但在第4步就失败了。 这对Appium有可能吗?有没有其他测试框架可以自动化这样的场景?

    • 谁能帮我这个,如何启用铬浏览器使用jitsi满足Android和ios与jitsi满足api 我将disableDeepLinking:true和MOBILE_APP_PROMO:false设置为false,但不起作用。非常感谢。

    • 问题内容: 当我有一个带有可滚动内容的网页时。使用css属性“ overflow:auto”或“ overflow:visible”,滚动条在桌面浏览器上可见,但是当我在移动浏览器上打开页面时,滚动条仅在尝试滚动时出现。有没有一种方法可以使滚动条在移动设备上始终可见?我尝试了一些JQuery库,但是都没有用。 html代码是微不足道的,我有一个带有IFrame的可滚动div: CSS: 问题答案: