盡管在上一節中,我們已經能夠通過FillAsync
或ClickAsync
來實現輸入和點擊元素。但是,還有其他場景,我們必須模擬用戶使用鍵盤、鼠標與頁面交互。例如在線文檔:
Page.Keyboard 對象
Keyboard
提供用于管理虛擬鍵盤的 API,它會在 page 上生成正確的 keydown、keypress 和 keyup 事件。
例如,實現下列流程:
按住 Shift 鍵輸入字符 a,得到大寫字母 A
按實際大小寫輸入字符 Bc
按住 Shift 鍵不放,再按 3 次左箭頭, 再釋放 Shift 鍵,達到選中 ABc 的目的
輸入 Backspace 鍵,刪除選中文本
輸入文本 MyIO
代碼如下:
await?page.Keyboard.PressAsync("Shift+KeyA");
await?page.Keyboard.TypeAsync("Bc");await?page.Keyboard.DownAsync("Shift");
for?(var?i?=?0;?i?<3;?i++)await?page.Keyboard.PressAsync("ArrowLeft");
await?page.Keyboard.UpAsync("Shift");await?page.Keyboard.PressAsync("Backspace");await?page.Keyboard.InsertTextAsync("MyIO");
這里使用了 3 個不同的輸入方法:
PressAsync
,輸入單個字符,可以和修飾鍵(例如 Shiift)組合使用TypeAsync
, 逐個輸入單個字符InsertTextAsync
,輸入文本,特別之處在于它不會引發 keydown, keyup 或者 keypress 事件
Page.Mouse 對象
Mouse
提供用于管理虛擬鼠標的 API,原點坐標為頁面 MainFrame 視圖的左上角。
例如,實現下列流程:
鼠標移動到"更多"鏈接
右鍵單擊"翻譯"圖標
代碼如下:
var?moreLink?=?page.Locator("//*[@id=\"s-top-left\"]/div");
var?box?=?await?moreLink.BoundingBoxAsync();
await?page.Mouse.MoveAsync(box.X?,?box.Y?);var?moreDiv?=?page.Locator("id=s-top-more");
box?=?await?moreDiv.BoundingBoxAsync();
await?page.Mouse.ClickAsync(box.X?+?(box.Width?/?3?/?2),?box.Y?+?(box.
Height?/?3?/?2),?new?MouseClickOptions?{?Button?=?MouseButton.Right?});
在這里我們使用了一個小技巧,不需要猜測"更多"鏈接所處的位置。Locator
提供了一個叫做BoundingBoxAsync
的方法,它返回元素的位置(X 和 Y)和大小(寬度和高度)。
通過元素所在位置和大小,我們可以精確控制鼠標位置,而無需擔心 UI 分辨率不同而對操作造成干擾。
添加微信號【MyIO666】,邀你加入技術交流群