UI Automation是一种带有图形用户界面的编程/脚本交互,通常用于测试或辅助功能。
Appium 检查器 - 无法连接到 Dart Observatory URL - Flutter
我正在尝试在appium检查器中为在Flutter中开发的android应用程序创建一个会话。 这是功能集: { “appium:automationName”: “颤动”, “啊……
如何在.NET 5或.NET 6中使用UIAutomation
我创建了一个包含 7 个项目的 Web API 解决方案。 其中之一名为FinanceApp.UIA,下面是我在这个项目中使用的SDK。请注意,其中包含“Microsoft.WindowsDesktop.App”, 我创建了一个包含 7 个项目的 Web API 解决方案。 其中一个名为FinanceApp.UIA,下面是我在这个项目中使用的SDK。请注意,其中包含“Microsoft.WindowsDesktop.App”, <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.WindowsDesktop.App" /> </ItemGroup> <ItemGroup> <Folder Include="SimulateType\" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\FinanceApp.Comon\FinanceApp.Common.csproj" /> <ProjectReference Include="..\FinanceApp.IRepository\FinanceApp.IRepository.csproj" /> <ProjectReference Include="..\FinanceApp.Model\FinanceApp.Model.csproj" /> </ItemGroup> </Project> 为什么包含“Microsoft.WindowsDesktop.App”?以下是我想在这个项目中做的事情 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Automation; using System.Threading; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using System.Runtime.InteropServices; using FinanceApp.Common; namespace FinanceApp.UIA { public class BaseUia:IBaseUia { delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport("user32.dll")] static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr GetHwndByClassName(string lpClassName, string lpWindowName); /// <summary> /// Get handles by process ID /// </summary> /// <param name="processId"></param> /// <returns></returns> public IEnumerable<IntPtr> GetHwndFromPid(int processId) { var handles = new List<IntPtr>(); foreach (ProcessThread thread in Process.GetProcessById(processId).Threads) { EnumThreadWindows(thread.Id, (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero); } return handles; } /// <summary> /// Get AutomationElement by process id /// </summary> /// <param name="processId"></param> /// <returns></returns> public IEnumerable<AutomationElement> GetElementsByPid(int processId) { var handles = GetHwndFromPid(processId); return handles.Select(hnd => AutomationElement.FromHandle(hnd)); } } } 另一个名为“FinanceApp.Service”的项目,SDK和参考如下: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <LangVersion>Latest</LangVersion> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\FinanceApp.UIA\FinanceApp.UIA.csproj" /> </ItemGroup> </Project> 我收到如下错误 目标平台必须设置为 Windows(通常通过包含 使用 Windows 窗体时,TargetFramework 属性中的“-windows” 或 WPF,或引用执行以下操作的项目或包 所以。 FinanceApp.Service C:\Program 文件\dotnet\sdk .0.100-preview.1.21103.13\Sdks\Microsoft.NET.Sdk argets\Microsoft.NET.Sdk.DefaultItems.targets 362 将解决方案中所有项目的目标框架更改为 net5.0-windows 按照 Simon 的建议解决了我的问题: 像这样更改目标框架:<TargetFramework>net5.0-windows</TargetFramework>这是一个完整的控制台应用程序示例:pastebin.com/raw/AqBnQUsh - 西蒙·穆里尔
我创建了一个包含 7 个项目的 webApi 解决方案。 其中之一名为“FinanceApp.UIA”,下面是我在该项目中使用的 SDK。 请注意,其中包含“Microsoft.WindowsDesktop.App”, 我创建了一个包含 7 个项目的 webApi 解决方案。 其中一个名为“FinanceApp.UIA”,下面是我在该项目中使用的 SDK。 请注意,其中包含“Microsoft.WindowsDesktop.App”, <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.WindowsDesktop.App" /> </ItemGroup> <ItemGroup> <Folder Include="SimulateType\" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\FinanceApp.Comon\FinanceApp.Common.csproj" /> <ProjectReference Include="..\FinanceApp.IRepository\FinanceApp.IRepository.csproj" /> <ProjectReference Include="..\FinanceApp.Model\FinanceApp.Model.csproj" /> </ItemGroup> </Project> 为什么包含“Microsoft.WindowsDesktop.App”?以下是我想在这个项目中做的事情 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Automation; using System.Threading; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using System.Runtime.InteropServices; using FinanceApp.Common; namespace FinanceApp.UIA { public class BaseUia:IBaseUia { delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport("user32.dll")] static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr GetHwndByClassName(string lpClassName, string lpWindowName); /// <summary> /// Get handles by process ID /// </summary> /// <param name="processId"></param> /// <returns></returns> public IEnumerable<IntPtr> GetHwndFromPid(int processId) { var handles = new List<IntPtr>(); foreach (ProcessThread thread in Process.GetProcessById(processId).Threads) { EnumThreadWindows(thread.Id, (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero); } return handles; } /// <summary> /// Get AutomationElement by process id /// </summary> /// <param name="processId"></param> /// <returns></returns> public IEnumerable<AutomationElement> GetElementsByPid(int processId) { var handles = GetHwndFromPid(processId); return handles.Select(hnd => AutomationElement.FromHandle(hnd)); } } } 另一个名为“FinanceApp.Service”的项目,SDK和参考如下: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <LangVersion>Latest</LangVersion> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\FinanceApp.UIA\FinanceApp.UIA.csproj" /> </ItemGroup> </Project> 我收到如下错误 目标平台必须设置为 Windows(通常通过包含 使用 Windows 窗体时,TargetFramework 属性中的“-windows” 或 WPF,或引用执行以下操作的项目或包 所以。 FinanceApp.Service C:\Program 文件\dotnet\sdk .0.100-preview.1.21103.13\Sdks\Microsoft.NET.Sdk argets\Microsoft.NET.Sdk.DefaultItems.targets 362 按照Simon的建议,将解决方案中所有项目的目标框架更改为“net5.0-windows”,然后就解决了。
无法使用 cypress 切换到新选项卡或窗口更改内容 - Javascript
更改内容 - Javascript <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Change Content - Javascript</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="robots" content="noindex, nofollow"> <meta name="googlebot" content="noindex, nofollow"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <a id="myelement" href="javascript:void(0);" onclick="openNewTab()" "="">Open New Tab </a> <script type="text/javascript">//<![CDATA[ function openNewTab() { window.openNew({ target:'test_blank', url: 'https://www.google.co.in/' }); } function openNew(option) { const form = document.createElement("form"); form.target = option.target || "_blank"; form.action = option.url; form.method = "GET"; document.body.appendChild(form); form.submit(); //debugger; $(form).remove(); } //]]> </script> </body> </html> 我有一种情况,我必须单击一个链接,打开一个新选项卡/窗口,由于 cypress 不支持多个选项卡,我找到了下面的解决方法,但它不起作用,它打开新选项卡,但无法切换新选项卡,我的测试失败并出现错误: 预期重定向至少被调用一次,但从未被调用过。 cy. visit('https://qa.abc.com/xyz/documents?action_id=1'); cy .window().then((win) => { cy.spy(win, 'open').as('redirect'); }); cy .get(':nth-child(1) > [style="width: 228px;"] > .text-ellipsis') .click(); cy .get('@redirect') .should('be.called'); 注意: 重定向的 url 是动态的并与 javascript 绑定,因此无法从控制台获取 url 也无法从链接中删除该属性。 这是随附的屏幕截图:在此处输入图像描述 上面是示例 HTML 文件,它复制了该问题: 重定向非常不寻常。 您可以通过在页面加载时使用拦截来阻止新选项卡。 另一个拦截将验证重定向是否转到正确的 URL。 it('tests a funky redirect', () => { const baseUrl = Cypress.config('baseUrl') cy.intercept('GET', baseUrl, (req) => { req.continue(res => { res.body = res.body.replace( 'form.target = option.target || "_blank";', 'form.target = "_self";' // prevent tab opening ) }) }) cy.visit(baseUrl); cy.intercept('GET', '**/www.google.co.in/*').as('newTab') cy.get('a').click() cy.wait('@newTab').then(interception => { expect(interception.request.url).to.include('www.google.co.in') }) cy.go('back') // previous location }); This approach will also work for redirecting for multiple redirection and when the you are redirected to other page by clicking on a button and not anchor, or when anchor does not have target property, it('Redirect', () => { let applicationsLinks=[]; cy.stub(win,'open').as('windowOpen').callsFake((url)=>{ applicationsLinks.push(url); }); cy.visit(baseUrl); cy.get('a').click(); cy.get('@windowOpen').should('be.called'); cy.then(()=>{ applicationsLinks.forEach((link,index)=>{ cy.visit(link); }); }); });
如何在 Python Playwright 中点击 JSHandle 中的元素
我有一个作为虚拟列表实现的下拉列表定位器,下面是我获取列表选项的方式 dropdown_locator.evaluate_handle('$0 => Array.from($0.__dropdownOptions) 结果...
打开选项卡、在选项卡之间切换、关闭浏览器上的选项卡不适用于 Playwright Typescript [已关闭]
我正在使用 beforeEach 打开一个选项卡 (t1),然后我将打开另一个选项卡 (t2)。现在,我想对 (t2) 执行一些操作并切换到 (t1)。然后,关闭 (t2) 选项卡。 test.beforeEach(异步 ({
我对IOS编程非常陌生。我的任务是确定是否可以自动化 UI 进行测试。这就是我想做的: 在我的应用程序中随机放置一些代码(听起来很糟糕,但可能是预定义的......
打开窗口、在选项卡之间切换、关闭浏览器上的窗口不适用于 Playwright Typescript
我正在使用 beforeEach 打开一个窗口(w1),然后我将打开另一个窗口(w2)。现在,我想对 (w2) 执行一些操作并切换到 (w1)。然后,关闭(w2)窗口。 测试.beforeEach(
在 Playwright Typescript 中使用 POM 对列进行排序不起作用
我想获取column1、column2等值并对列进行相应的排序。下面是 HTML 结构。我无法找到并获取列值。 当我运行下面的代码时,我得到
Detox 在 React Native 中无法通过 testID 找到 ActivityIndicator
我正在为 React Native 屏幕运行 Detox 测试,但遇到了 Detox 似乎无法通过其 testID 访问 ActivityIndicator 组件的问题。活动指示器显示...
我正在尝试使用浏览器扩展来自动化某些操作,但我遇到了输入问题。 问题是,我无法将该特定输入值设置为扩展中的任何内容。 如果我这样做
Python 与 Selenium:从文件系统拖放到 Webdriver?
我必须自动化一个 Web 应用程序,其中包含一个用于从本地文件系统上传文件的拖放区域。我的测试环境是使用Python开发的。对于自动化测试,我...
如何在 html 页面上获取 WebElement Uninue 标识符(Selenium、C#)
我想创建WebElement类(.Net)的子级 但问题是 WebElement 构造函数需要 2 个参数(驱动程序、id) 我知道如何获取具有可见属性 ID 的元素的 id,但如果它...
我必须测试一个网络应用程序,其中包含一个用于从本地文件系统上传文件的拖放区域。我的测试环境是基于C#的。 对于自动化测试,我使用了 Sel...
AE_ComboBox = uia.GetElementByControlTypeAndAutomationId(globalSettings, ControlType.ComboBox, "1"); AE_TargetValue = uia.GetElement(AE_ComboBox, 值, true); SelectionItemPattern SIP = AE_TargetV...
尝试使用appium检查器连接到Appium服务器时出现以下错误 错误无法创建会话。处理命令时发生未知的服务器端错误。原始错误:
我发现 PDF24 Windows 应用程序 https://tools.pdf24.org/en/creator 非常适合我的 PDF 到 Excel 转换输出。但是,有什么方法可以编写自动脚本来安排此转换
我在真实设备上使用Android 4.4,我想通过adb设置设备方向。 我不希望用 uiautomator 完成它,因为它在 uiautomator 代码终止后不会持续。 哈...
我可以使用selenium grid代替browserstack吗
目前我的组织正在评估使用 browserstack 或 seleium grid,因为 browserstack 很昂贵 我们使用WebdriverIO作为框架 有谁知道将 seleniumgrid 与
我想在Catia中逐一运行宏列表,在运行每个宏时它会显示消息框。要继续下一个宏,我单击消息框上的“确定”或“关闭”按钮来关闭。直到我关闭