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

使用Xamarin UiTest启用/禁用wifi

谷涵容
2023-03-14

我尝试在我的Xamarin Ui测试中以编程方式启用/禁用wifi。< br >我已经找到了这个:Android:如何以编程方式启用/禁用Wifi或互联网连接。但是它似乎根本不起作用。< br>
我还尝试了这样的方法:

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(Context.WifiService);
bool status = false;
wifiManager.SetWifiEnabled(status);

第一行 (Android.App.Application.Context) 会引发一个异常:

Message: System.IO.FileNotFoundException : Could not load file or assembly 'Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065' or one of its dependencies. The system cannot find the file specified.

我正在使用以下命名空间:

using Android.Net.Wifi;
using Android.Content;

我的项目引用了< code>Mono。Android。

共有1个答案

通正平
2023-03-14

后门方法对我来说很好。

对我有用的解决方案是以下组合:

  • Android:如何以编程方式启用/禁用Wifi或互联网连接
  • 这是一个很好的例子https://docs.microsoft.com/en-us/appcenter/test-cloud/uitest/working-with-backdoors
  • 一些小的更改(对于appcontext/context)。只是上下文对我不起作用

1.:将以下行添加到Android项目的AndroidManifest.xml文件中:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

2.:在Android项目的MainActivity.cs中添加以下行:

using Java.Interop;
using Android.Net.Wifi;

[Export("ChangeWifiState")]
public void ChangeWifiState(bool state)
{
    Context appContext = Android.App.Application.Context;
    var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
    wifiManager.SetWifiEnabled(state);
}

3.:从Xamarin Ui测试中调用以下方法:

app.Invoke("ChangeWifiState", false);    // true to enable wifi, false to disable wifi

PS:我使用Xamarin Forms。我有四个不同的项目:一个核心项目、一个Android项目、一个Ui项目和一个测试项目。我刚刚在不使用实际应用程序的情况下找到了第二个解决方案。
它使用ADB命令启用/禁用wifi:

        var process = new System.Diagnostics.Process();
        var startInfo = new System.Diagnostics.ProcessStartInfo
        {
            WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
            FileName = "cmd.exe",
            Arguments = "/C adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings adb shell input keyevent 19 & adb shell input keyevent 19 & adb shell input keyevent 23 & adb shell input keyevent 82 & adb shell input tap 500 1000"
        };
        process.StartInfo = startInfo;
        process.Start();

这可以在没有根设备:)的情况下使用。
步骤说明:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.Wifi设置会打开wifi设置。
adb shell 输入密钥事件 23 启用/禁用 wifi。我不确定
为什么使用命令adb shell输入keyevent 19,但它有效。
adb shell 输入 keyevent 82 单击菜单按钮以更改回原始应用。
adb shell 输入点击 500 1000 单击坐标 x=500,y=1000(屏幕中心)。对于不同的解决方案,可能需要对此进行更改。
此解决方案的来源:

  • 如何通过ADB关闭Wifi
  • ADB外壳输入事件
  • 运行命令提示符命令
 类似资料:
  • 我正在尝试使用hazelcast mancenter配置wan复制,但我没有在此处获得选择快照启用/禁用功能的选项,因为该选项未在dropdown.Is中列出,有办法通过mancenter实现此功能吗?版本3.9.4 hazelcast版本3.9.3 谢谢

  • 问题内容: 如何使用jQuery启用或禁用锚点? 问题答案: 为了防止锚跟随指定的位置,我建议使用:

  • 20.2.3 禁用重启 如果您不想使用重启功能,可以使用spring.devtools.restart.enabled属性将其禁用。在大多数情况下,您可以在application.properties中设置它(这仍会初始化重启类加载器,但是它不会监视文件的变化)。 如果您需要完全禁用对重启的支持,比如,由于重启功能不适用某个特定的库,则需要在调用SpringApplication.run(…​)之

  • 问题内容: 我有一个下拉菜单(dropdown2), 如果 其中包含某些内容,则是必需的,但是它的选项数据由另一个下拉菜单(dropdown1)的ajax驱动。有时dropdown2将为空,在这种情况下,我可以不需要它。所以我可以通过调用此禁用javascript中的… 这可以正常工作,但服务器仍会触发逻辑。是否有人知道如果验证器设置为假客户端,我将如何强制服务器不进行验证? 问题答案: 您为什么

  • 问题内容: $input.disabled = true; 要么 哪种标准方法?相反,如何启用禁用的输入? 问题答案: jQuery 1.6以上 要更改属性,您应该使用函数。 jQuery 1.5及以下 该函数不存在,但具有相似的功能: 设置禁用的属性。 要再次启用,正确的方法是使用 在任何版本的jQuery中 您始终可以依赖实际的DOM对象,并且如果只处理一个元素,它可能比其他两个选项要快一些: