【问题标题】:How to switch from a desktop app view to a webview and back again?如何从桌面应用程序视图切换到 web 视图并再次返回?
【发布时间】:2019-09-30 15:15:38
【问题描述】:

我在正在自动化的桌面应用程序中达到了某个点,我需要单击一个链接并继续在浏览器中实现自动化。该链接会自动转到 Internet Explorer。(有关如何将其复制并粘贴到 chrome 中的建议将不胜感激)。我需要知道如何从桌面切换到 web 视图、自动化 web 视图并返回到桌面视图。

到目前为止,这是我发现的最接近解决问题的方法。我是 c# 的新手,所以我知道我想要做什么的理论,只是不知道如何实现它。 http://appium.io/docs/en/writing-running-appium/web/hybrid/。我已经将上下文记录到我的输出中。我还不能设置或重置它。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Remote;

namespace UnitTestProject2
{
    [TestClass]
    public class GoldTrakPCTest
    {
        [TestMethod]
        public void TestMethod1()
        { 
            AppiumOptions options = new AppiumOptions();
            options.AddAdditionalCapability("deviceName", "WindowsPC");
            options.AddAdditionalCapability("platformName", "Windows");
            options.AddAdditionalCapability("app", "XXXX -Path to desktop app");
            WindowsDriver<WindowsElement> windowsDriver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723/"), options);
            Thread.Sleep(1500);
            windowsDriver.FindElementByAccessibilityId("1006").SendKeys("Username");
            windowsDriver.FindElementByAccessibilityId("1003").SendKeys("Password");
            windowsDriver.FindElementByAccessibilityId("1001").SendKeys("354 - B - Mariner");
            windowsDriver.FindElementByAccessibilityId("1").Click();
            var myVar = windowsDriver.FindElementByAccessibilityId("59393");
            Thread.Sleep(4200);
            //Trace.WriteLine(windowsDriver.FindElementByName("WILLY WONKA"));
            windowsDriver.FindElementByName("WILLY WONKA").Click();
            Thread.Sleep(1000);
            windowsDriver.FindElementByAccessibilityId("1310").Click();
            Thread.Sleep(4000);
            windowsDriver.FindElementByName("Documents").Click();
            Thread.Sleep(4000);
            windowsDriver.FindElementByAccessibilityId("1011").Click();
            windowsDriver.FindElementByAccessibilityId("1011").Click();
            windowsDriver.FindElementByName("Doc Set - WI Esign Documents").Click();
            windowsDriver.FindElementByAccessibilityId("4750").Click();
            Thread.Sleep(4000);
            windowsDriver.FindElementByName("OK").Click();
            windowsDriver.FindElementByAccessibilityId("2034").Click();
            Thread.Sleep(4000);
            string Context = windowsDriver.Context;
            Trace.WriteLine(Context);
            /*List<string> AllContexts = new List<string>();
            foreach (var context in (windowsDriver.Contexts))
            {
                AllContexts.Add(context);
                Trace.WriteLine(context);
            }*/
            //Trace.WriteLine(AllContexts, "Hello");
            //options.AddAdditionalCapability("")
            //windowsDriver.FindElementByName("WILLY WONKA").Click();
            //windowsDriver.FindElementByName("Next").Click();



            Thread.Sleep(6000);

            //windowsDriver.Close();
        }
    }
}

我需要知道如何更改上下文,是否可以在本地 Windows 桌面应用程序和浏览器之间切换,以及如何做到这一点。

【问题讨论】:

    标签: c# appium winappdriver


    【解决方案1】:

    这是可能的。我有 2 个桌面应用程序和 1 个 Web 应用程序都在串联运行。但是,我有一个关于“链接自动转到 Internet Explorer 的问题。(有关如何将其复制并粘贴到 chrome 中的建议将不胜感激)。”

    是因为 Internet Explorer 是 Windows 中的默认资源管理器吗?

    在应用之间切换上下文。

    只要你点击打开 Web 的 windows 元素(IE 或 chrome),你就需要创建 Webdriver 实例(IE/chrome)并将其附加到浏览器进程

    启动/附加到现有会话的测试初始化​​方法: How to use/attach an existing browser using Selenium?

    【讨论】:

    • 谢谢。它不是操作系统的默认浏览器。这是唯一适用于我正在测试的应用程序的链接。
    猜你喜欢
    • 2020-09-08
    • 2020-12-12
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多