天天看點

軟體測試求職篇:Playwright 面試問題,你可能會很頭疼

作者:Atstudy網校

面試中遇到的現場編碼挑戰,特别是那些故意設計來讓你失敗的挑戰,确實會讓人感到不悅。這裡有12個關于Playwright的面試問題及答案,希望能給你一些優勢。

軟體測試求職篇:Playwright 面試問題,你可能會很頭疼

這些問題的建立是為了迷惑你,是以如果你沒有答對,也不要對自己太苛刻。同時,一些答案包含解釋和代碼示例。請滾動到頁面底部檢視。

1.本地環境

如果你在本地機器上使用你需要設定并啟動的本地環境運作測試,例如在http://localhost:3000/,你将如何在測試運作期間處理本地環境的設定?

可能的答案:

·在運作測試之前啟動你的本地環境

·在package.json中編寫一個腳本來啟動本地環境并運作你的測試

·使用webServer

答案

所有可能的答案都是有效的,但推薦的方法是使用webServer配置。

2.contain比較

除了一個接受定位器,另一個接受值之外,await expect(locator).toContainText()和await expect(value).toContain()兩者之間的主要差別是什麼:

答案

第一個是自動重試斷言,意味着它将重試最多5秒鐘,直到元素出現;第二個将嘗試一次性斷言。

3.延遲加載

在下面的URL中,文本"Loading complete"将在10秒後出現。我們的測試在expect步驟中失敗,預期:可見,收到:隐藏。你如何修複這個測試?

test("The visible methods",async({page})=>{

await page.goto("https://webdriveruniversity.com/Accordion/index.html");

await expect(page.getByText("LOADING COMPLETE.")).toBeVisible()

});

答案

預設的expect逾時是5秒,如果在該時間間隔内元素不可見,測試将失敗。為了修複測試,我們通過添加一個逾時,僅為此步驟延長逾時,超過我們知道的10秒延遲,如下所示:await expect(page.getByText("LOADING COMPLETE.")).toBeVisible({timeout:12000})

4.自我修複

知道magento.softwaretestingboard.com上有一個名為"Sale"的菜單項,點選它将導航到一個新頁面。完成下面的測試,通過編寫一個新的步驟,點選"Sale"菜單選項,但為該元素建立一個自我修複的定位器。

test("The self-healing",async({page})=>{

await page.goto("https://magento.softwaretestingboard.com/");

await page.getByLabel('Consent',{exact:true}).click()

});

答案

自我修複定位器是指你使用多個定位器指向同一個元素,但使用輔助方法或使用OR運算符将它們連結在一起。使用OR運算符,你可以提供多個指向同一進制素的定位器,如果一個由于應用程式更改而損壞,它可以嘗試使用另一個。

5.關閉的浏覽器

這段代碼将做什麼:

test("The closed browser",async({page})=>{

await page.goto("https://blog.martioli.com/");

await page

.getByRole('link',{name:'About'})

.click();

expect(page).toHaveURL(/about/);

});

可能的答案:

·測試将失敗,因為About是一個按鈕而不是一個連結

·測試将因目标頁面出錯而失敗

·測試将因傳遞給.toHaveURL()的參數而失敗

答案

測試将因目标頁面出錯而失敗。錯誤:expect.toHaveURL:目标頁面、上下文或浏覽器已關閉。

6.引用

知道第二步上點選的元素是一個頁面上的傳回連結,這段代碼将做什麼:

test("The reference",async({page})=>{

await page.goto("https://blog.martioli.com/playwright-tips-and-tricks-1/");

await page

.locator('section').locator('p').locator('a').getByText('buy me a coffee').click()

await expect(page).toHaveURL(/blog.martioli.com/)

});

可能的答案:

·測試将失敗,因為'buy me a coffee'是一個連結,我們已經從martioli.com導航離開了

·測試将通過

·測試将失敗,因為你不能混合使用locator().locator().locator()

答案

測試将通過,因為點選傳回連結将生成一個帶有我們初始來源(blog.martioli.com)引用的URL。

7.其他語言環境

修改下面的測試,并讓它用不同的語言環境運作,例如德語。

test("The locale",async({page})=>{

await page.goto("https://www.google.com/");

});

答案

你可以在測試内部修改配置。隻需在測試上方添加test.use({locale:'de-DE'})

8.CSS屬性

考慮到下面的代碼,你如何改進它以提高可讀性和簡潔性。

test("The css properties",async({page})=>{

await page.goto("https://magento.softwaretestingboard.com/");

await page.getByLabel('Consent',{exact:true}).click()

const element=page.getByText("Shop New Yoga")

const backgroundColor=await element.evaluate((el)=>{

return window.getComputedStyle(el).getPropertyValue('background-color');

});

expect(backgroundColor).toBe("rgb(25,121,195)")

});

答案

你不需要調用evaluate,因為你已經有一個内置的方法叫做toHaveCSS()。同時記住,toHaveCSS()具有自動重試功能,這在等待某些元素屬性延遲出現時至關重要。

9.長按

考慮到下面的代碼,你如何修改點選步驟以模拟按住左滑鼠按鈕3秒鐘然後釋放滑鼠按鈕。

test("The long click",async({page})=>{

await page.goto("https://www.clickspeedtester.com/mouse-test/");

await page.getByRole('link',{name:'Second Clicker'}).click()

});

答案

Click可以可選地接受一個對象,其中屬性為delay,值為毫秒。像這樣:.click({delay:3000})将它與元素配對,它将在該元素上持續3秒鐘然後釋放滑鼠按鈕。

10.強制

頁面上有一個資料同意彈出視窗,你必須遵守。"搜尋"按鈕隐藏在這個模态框後面。給定以下代碼。将會發生什麼?

test("The force",async({page})=>{

await page.goto("https://www.google.com/");

//搜尋輸入字段

await page.locator('textarea').first().fill("martioli")

//搜尋按鈕

await page.locator('[type=submit][name="btnK"]').last().click({force:true})

});

可能的答案:

·測試将通過。我使用了{force:true},它将點選按鈕并在模态框後面顯示結果

·測試将通過,但模态框後面不會顯示結果

·測試将失敗,逾時,因為它不能點選模态框後面的按鈕

答案

測試将通過,但模态框後面不會顯示結果。force:true不會在元素在另一個元素下面時點選,但它也不會出錯(playwright的bug?)。填充()的情況并非如此。如果你檢查輸入,它在輸入字段中輸入沒有問題。

11.基礎URL

我在配置檔案中設定了baseUrl。這段代碼将做什麼:

test("The baseurl",async({page})=>{

await page.goto('');

});

可能的答案:

·測試将失敗。我在引号之間忘記了/

·測試将失敗,因為.goto()需要雙引号

·測試将通過

答案

測試将通過,空字元串和"/"的作用相同。它将導航到在playwright.config.js中配置的baseUrl。

12.工作線程

考慮到下面的關于工作線程的配置。如果我運作100個測試套件,它們将如何運作:

module.exports=defineConfig({

testDir:"./tests",

workers:"5%",

projects:[

{

name:"chromium",

use:{...devices["Desktop Chrome"]},

},

],

});

可能的答案:

·測試将以工作線程的5%的功率運作得非常慢

·測試将在你擁有的CPU核心數的5%上運作

·測試甚至不會開始,因為你不能為工作線程設定百分比值

答案

測試将在你擁有的CPU核心數的5%上運作。例如,如果你有4個核心,這意味着100%中的4個将意味着每個25%。在我們的情況下,5是25%以下,是以你将隻有一個工作線程。

文末了,我邀請你進入我們的軟體測試學習交流群,大家可以一起探讨交流軟體測試,共同學習軟體測試技術、面試等軟體測試方方面面,了解測試行業的最新趨勢,助你快速進階Python自動化測試/測試開發,穩住目前職位同時走向高薪之路。

最後:

1)關注+私信回複:“測試”,可以免費領取一份10G軟體測試工程師面試寶典文檔資料。以及相對應的視訊學習教程免費分享!

繼續閱讀