1. 程式人生 > >自動化測試中FindWindow與FindWindowEx的使用示例

自動化測試中FindWindow與FindWindowEx的使用示例

昨天在做一個網頁測試時,它會彈出一個對話方塊(如下圖)對使用者進行一個認證。

Capture

使用Spy++偵測這個對話方塊的結構如下,我們看到兩個Edit就在最後兩個節點上。

Capture1

我們現在就可以利用FindWindow以及FindWindowEx這兩個函式來幫我們找到這個窗體及窗體上所有的控制元件,然後幫我們完成自動化測試。

下面這個程式就是幫我們自動輸入使用者名稱與密碼。

複製程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using
System.Threading;

namespace ConsoleApplication79
{
class Program
{
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private extern static IntPtr FindWindow(string classname, string captionName);

[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
private
extern static IntPtr FindWindowEx(IntPtr parent,IntPtr child,string classname, string captionName);

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);

[DllImport("user32.dll")]
[return
: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

static void Main(string[] args)
{

IntPtr mwh1 = IntPtr.Zero;

while (mwh1 == IntPtr.Zero)
{
Thread.Sleep(1000);
mwh1 = FindWindow(null, "Windows Security");
}

IntPtr panel = FindWindowEx(mwh1, IntPtr.Zero, "DirectUIHWND", null);

IntPtr CtrlNotifySink = IntPtr.Zero;

CtrlNotifySink = FindWindowEx(panel, IntPtr.Zero, "CtrlNotifySink", null);

for (int i = 1; i < 7; i++)
{
CtrlNotifySink = FindWindowEx(panel, CtrlNotifySink, "CtrlNotifySink", null);
}

IntPtr editor = FindWindowEx(CtrlNotifySink, IntPtr.Zero, null, null);

uint WM_SETTEXT = 0xC;

SendMessage(editor, WM_SETTEXT, IntPtr.Zero, "username");

CtrlNotifySink = FindWindowEx(panel, CtrlNotifySink, "CtrlNotifySink", null);
editor = FindWindowEx(CtrlNotifySink, IntPtr.Zero, null, null);

SendMessage(editor, WM_SETTEXT, IntPtr.Zero, "password");
}
}
}
複製程式碼

主要注意的一點就是程式碼裡使用FindWindowEx迴圈查詢子控制元件,因為這些控制元件都是具有相同類名的。

輸入好資訊後,查詢OK那個Button也差不多是這樣的方法重複。

下面介紹一下更無恥的方法哈:

複製程式碼
static void Main(string[] args)
{

IntPtr mwh1 = IntPtr.Zero;

while (mwh1 == IntPtr.Zero)
{
Thread.Sleep(1000);
mwh1 = FindWindow(null, "Windows Security");
}


SetForegroundWindow(mwh1);
System.Windows.Forms.SendKeys.SendWait("username");
System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("password");
System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("{ENTER}");


}
複製程式碼

呵呵!其實就是將需要處理的視窗啟用,用SendKey處理,這是我同事想出來的,記錄一下!

可能還有更多更好的方法,希望各位多多指點了!

這裡再分享一個網站,這個網站非常方便我們查詢在C#中呼叫Win32中的API

相關推薦

自動化測試FindWindowFindWindowEx的使用示例

昨天在做一個網頁測試時,它會彈出一個對話方塊(如下圖)對使用者進行一個認證。 使用Spy++偵測這個對話方塊的結構如下,我們看到兩個Edit就在最後兩個節點上。 我們現在就可以利用FindWindow以及FindWindowEx這兩個函式來幫我們找到這個窗

Python3簡易介面自動化測試框架設計實現(

目錄 7、Excel資料讀取 7.1、讀取配置檔案 7.1、編寫Excel操作類 8、用例組裝 9、用例執行結果校驗 10、執行用例 11 、

ui自動化測試的意義理解

方法 慢慢 lin 線上 效果 fff 效率 場景 答案 分層測試的思想 分層測試(有的也叫測試金字塔)是最近幾年慢慢流行、火熱起來的,也逐漸得到了大家的認可,大家應該已經比較熟悉分層測試的思想了,不太了解的可以自行找一些相應的渠道去補充一下上下文的知識。 總的來說測試需要

Selenium自動化測試的等待

功能 動態生成 耗時 頁面元素 部分 ive spa quest 實現 自動化測試過程中的等待我習慣分為兩種固定等待和動態等待。 固定等待就是直接采用sleep的方式讓代碼等待固定時間。這是比較簡單的等待方式,是一種不推薦使用但是在某些特定條件下最快能夠解決問題的等待

app自動化測試的相關api

hello 輸入 app send round image IT end http 這個說的api即python自動化測試中經常會使用到的一些api,具體如下: 1、find_element_by_id/find_elements_by_id 定位元素api,使用方法如

自動化測試測試數據如何管理?

Once 綜合 選擇 word 基礎 體系 調用 ui自動化 結果 今晚在某個測試群,看到有人問了一個問題:把測試數據放配置文件讀取和放文件通過函數調用讀取有什麽區別? 當時我下意識的這麽回答:數據量越大,配置文件越臃腫,放在專門的數據文件(比如excel,csv),方便針

網路爬蟲以及自動化測試圖形驗證碼識別解決思路以及方法

前言 做自動化測試的朋友都知道圖形驗證碼在整個自動化執行過程中,很可能是阻礙推進的問題,可以採用萬能驗證碼(開發哥哥會流出一個供自動化測試用的),如果不通過開發預留,有以下解決方案。 解決思路 1.python3自帶光學字元識別模組tesserocr與pytesseract,可以識別簡單驗證碼; 2.稍

Web自動化測試針對圖片驗證碼問題的常見解決思路

圖片驗證碼(Captcha)問題在自動化測試中是一個很常見的問題,也是一個很棘手的問題。圖片驗證碼設計的初衷其實就是為了防自動化,防止一些人利用自動工具惡意攻擊網站,而很不幸的是,我們所使用的一些自動化測試工具也包含在內。當然了,對付驗證碼也不是一點辦法都沒有,方法還是有很多

自動化測試,用到File類的相關程式碼

String pathString="/sdcard/autotest/screenRecord"+File.separator 建立檔案路徑: File recordFolder=new File(pathString);if (!recordFolder.exists()) {rec

演算法自動化測試的挑戰思考

一、背景 從入職到現在已經有3個多月了,從最初的對於電商廣告業務和演算法測試的一頭霧水,到現在的漸漸瞭解,基本上已經可以勝任專案的常規質量保障任務。然而,目前的質量保障手段依然停留在手工測試層面,自動化相對來說依然是比較空白。 關於持續整合和自動化,早已不是新鮮的話題。但是搜了下內網上關於自動化的一些話題,發

Web自動化測試針對圖片驗證碼問題的常見解決思路,看看對您有沒有幫助

原文地址 圖片驗證碼(Captcha)問題在自動化測試中是一個很常見的問題,也是一個很棘手的問題。圖片驗證碼設計的初衷其實就是為了防自動化,防止一些人利用自動工具惡意攻擊網站,而很不幸的是,我們所使用的一些自動化測試工具也包含在內。當然了,對付驗證碼也不是一點辦法都沒

Web自動化測試的介面測試

Web自動化測試中的介面測試 1、背景 1.1 Web程式中的介面 1.1.1 典型的Web設計架構 web是實現了基於網路通訊的瀏覽器客戶端與遠端伺服器進行互動的應用,通常包括兩部分:web伺服器和web客戶端。web客戶端的應用有html,JavaScript,ajax

關於自動化測試出現的cannot focus element報錯問題

今天在做一個登入的簡單自動化測試實驗其實只要元素定位到賬號、密碼、登入按鈕即可但是在過程中卻出現了問題通過css_selector來定位元素 程式沒有報錯確實定位成功,且執行click()事件時滑鼠也的確能點選到,但是用send_keys輸入內容時卻報錯,如圖:顯示錯誤為“c

android自動化測試hierarchyviewer和uiautomatorviewer獲取控制元件資訊的方式比對

android自動化新人一個,目前研究PC端獲取android裝置的控制元件資訊有哪些方式。多多指教!         android的目錄tools下有2個自帶的工具hierarchyviewer和uiautomatorviewer,開啟後,如下所示:

android自動化測試hierarchyviewer和uiautomatorviewer獲取控制元件資訊的方式比對(2)

       在上一篇我簡單的瞭解了一下hierarchyviewer和uiautomatorviewer,如需訪問,點選以下連結:        通過對hierarchyview的原始碼分析,我嘗試用java寫了一個測試工具,該測試工具簡單的實現了連線ViewServe

Python3.X Selenium 自動化測試如何截圖並儲存成功

在selenium for python中主要有三個截圖方法,我們挑選其中最常用的一種。 挑最常用的:get_screenshot_as_file() 相關程式碼如下:(下面的程式碼可直接複製) # coding=utf-8import timefrom selenium import webdri

自動化測試的驗證碼識別python程式碼

在部分登入頁面中有驗證碼,在自動化測試用例中解決驗證碼問題的方案:1.去掉驗證碼:讓開發先隱藏驗證碼,這是最簡單的方式2.設定一個萬能驗證碼:也就是在程式碼中留個後門,這是最有效的方式3.驗證碼識別技術4.新增cookie,繞過登入這裡介紹一下驗證碼識別:(1)原理:首先是對

自動化測試面試問題解答

1)什麼是自動化測試? 自動化測試是一種使用自動化工具編寫和執行測試人員測試指令碼和案例的技術。 自動化測試的主要目標是減少手動執行的測試用例數量,而不是完全取消手動測試。 2)什麼時候自動化測試? 在以下情況下首選自動化 重複性任務 煙霧和理智測試 使用多個數

Web自動化測試架構設計實現

分散式計算將網路服務帶到世界的每一個角落,這些服務又大都部署在Web應用系統中。如何保障高質量軟體或服務則是個突出的問題,其實軟體測試從來就不應該被輕視。對於一個複雜的web應用程式系統需要測試的方面太多了,特別是那些開發週期很長的系統,如果所以測試都通過手工來完成,顯然

自動化測試獲取頁面元素

到目前為止也只做了幾個月測試,自動化測試指令碼寫了不超過十個。但是藉助公司原有的框架,感覺還是學到很多東西,有必要整理記錄。 1.普通的html標籤: 通過id, xpath即可得到。 2.偽元素:即緊跟在標籤之後的:before, :after 等元素,有時候某些驗