Playwright可與頁面中的元素直接進行互動,輸入文字、選擇選單選項、點擊按鈕、下載及上傳文件等,這章節會介紹常用到的元素操作。
### 1.輸入文字 Fill()/Type()
通常用在 <input>、<textarea>元素,輸入文字。
fill是一次將文字貼上,而type是模擬使用者一個字一個字打
```python
page.get_by_test_id('StarTime').fill('2023/07/01')
page.locator('#Password').fill('admin1234')
Page.locator('#UserName').type('asd9876')
```
### 2.click()點擊
執行點擊動作,通常使用在<button><checkbox>上
```python
page.get_by_role('button',name='搜尋').click()
#也可把button封裝
button=page.get_by_role('button',name='搜尋')
button.click()
```
### 3.set_input_files()上傳文件
需上傳的圖片資料等放入project的資料夾中,需先定位到輸入框.再使用set_input_files().上傳檔案。
```python
page.get_by_text('圖片:').set_input_files('images.png')
```
==若需點擊才可打開上傳視窗,可用page.expect_file_chooser()監聽彈出框,再輸人上傳的文件路徑==
<br/>
### 4.expect_download()下載文件
此為監聽功能,我們可以獲得下載路徑、資訊、儲存檔案
```python!
with page.expect_download() as download_info:
get_by_role(‘menuitem’,name="JPG").click() #點擊下載開始監聽
download=download_info.value
path=download.path()
download.save_as(download.suggested_filename)#可使用建議名稱存檔或自取
print(path)
```
### 5.screenshot()頁面截圖
擷取當前頁面螢幕截圖,也可以針對元素截圖,path="輸入路徑名稱.jpg"檔案類型也可自行定義png、jpg等。
```python!
page.screenchot(path='xxx.png')
```
### 6.wait 等待
**等待**
```python!
page.wait_for_timeout(1000) #單位為毫秒
```
**等待元素(狀態)**
為避免網頁未加載完成造成定位失敗,我們可以使用等待元素的狀態,如等待元素可見時再繼續執行腳本。
```python!
page.wait_for_selector('.btn',ststus='visible') #可見
page.wait_for_selector('.btn',timeout='5000')#自定義時間若超過五秒沒搜尋到元素會報錯
```
**等待url**
跳轉頁面時我們可以使用此api 等待頁面跳轉至新的頁面才開始執行測試,例如點選導覽列某一頁籤後,我們使用此方法確認頁面是否已完成跳轉,確認已跳轉就可執行下一步操作
```python!
page.wait_for_url('https://example')
```
### Expect 斷言/驗證

驗證元素是否可見
我點擊進入某個頁面應該要出現某一個文字或按鈕
```python!
按鈕是否可見 ?
button=page.locator('.btn')
expect(button).to_be_visible()
```
驗證文本是存在
```python!
頁面標題文字是否正確
title=page.locator('.inner')
expect(title.inner_text()).to_have_text("報表查詢")
```
驗證api響應狀態
```python!
頁面標題文字是否正確
with page.expect_response(url) as res:
button.click() # 執行動作獲取響應,這個是點擊按鈕後獲取響應
response= res.value #response內容
response=response.json()#可轉為json格式做分析
```
==需練習可至 https://letcode.in/test==