• 0
  • 0
分享
  • Playwright 面试问题,你可能会很头疼——软件测试圈
  • 曼倩诙谐 2024-05-20 11:22:00 字数 4621 阅读 708 收藏 0

  面试中遇到的现场编码挑战,特别是那些故意设计来让你失败的挑战,确实会让人感到不悦。这里有12个关于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%以下,所以你将只有一个工作线程。


作者:Adrian Maciuc    

来源:http://www.51testing.com/html/52/n-7800852.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Selenium是一款基于Web页面的UI自动化测试框架支持多浏览器操作:Chrome、IE、Firefox、Safaria等;支持夸平台,Windows、Linux、Mac等;持多语言,Python、Java、Ruby、C#等。1、Selenium webdriver 原理:Webdriver是按照Client/Server模式设计的Client:编程语言客户端Server:浏览器驱动程序。用来接收客户端的请求并驱动浏览器执行操作然后返回结果Selenium代码与浏览器驱动程序之间是通过http协议进行数据交互的。这种方式,不在乎客户端是什么样的形式,只要数据的格式和协议是服务端能够解析的就...
            0 0 962
            分享
          •   10月宠粉福利即将结束,填问卷马上参与。不仅能免费获得测试资料,还能参与抽奖活动,京东卡、测试书籍不容错过。链接:http://vote.51testing.com/  功能  · 钢笔是否可以正常写字  · 写字的时候    -钢笔出水是否流畅    -出水量是否合适, 不会过大, 也不会过小  · 钢笔的墨囊上是否有容量刻度    -如果有容量刻度, 是否和标准刻度一致  · 是否可以显示墨水的存量  · 钢笔的笔帽是否容易盖上    -是否会出现很难盖上, 用力过大    -是否会出现盖上后笔帽太松, 容易划掉  · 笔尖  &nbs...
            0 0 1278
            分享
          •   前言  性能测试用例主要分为预期目标用户测试、用户并发测试、疲劳强度与大数据量测试、网络性能测试、服务器性能测试五大部分。  具体编写用例时要根据实际情况去进行,遵守低成本、策略为中心,裁减、完善模型,具体化等原则。  Web性能测试模型提出的主要依据是:一种类型的性能测试可以在某些条件下转化成为另外一种类型的性能测试,这些类型的性能测试的实施是有着相似之处的。  预期指标的性能测试  系统在需求分析和设计阶段都会提出一些性能指标,完成这些指标的相关的测试是性能测试的首要工作之一,这些指标主要诸于:系统可以支持并发用户200个,系统响应时间不得超过20秒等。  对这种预先承诺的性能要求,需...
            0 0 1072
            分享
          •   Twitter公司的前身 Twitter 正准备对其算法进行一次"重大更新"。马斯克说,目前该应用的"For You"推送会显示来自其更广泛网络的热门和趋势帖子,以及你关注的人的精彩内容,而新算法将显示来自相对影响力不那么大的一般账户的帖子。  他指出,这些帖子和账户将包括用户"好友和关注"网络之外的账户,这意味着这一变化将试图让用户接触到他们可能觉得有趣但尚未发现的新账户。这也将使小型创作者有机会被更多人发现,这也符合马斯克将 X 打造成一个创作者平台的计划。  在过去的几个月里,X 平台针对创作者推出了一些功能,比如支持长篇文...
            0 0 325
            分享
          • 线上化、移动化的银行金融服务方兴未艾、持续深化,一个显著的标志就是手机银行成为银行领域金融科技发力的重点。整体页面文字的易读性、页面跳转的合理性、操作的便利性、功能响应的敏捷性、页面色彩和排版的美观性等,都是使用过程中用户视角下手机银行是否好用的评价对象。手机银行用户体验的重要性日益提升,但是目前体验性评价还存在方法、度量、标准上的一些不成熟之处。本文提出一种手机银行体验是否良好的量化评价方法,通过设置激励机制引导用户对手机银行的的业务模块或产品功能进行评分,支持对收集到的大量数据进行整体分析和分类分析,形成量化的用户体验评价指标,改善手机银行体验性测试中偏重于定性分析的现状。一、背景定量的体...
            0 0 1835
            分享
      • 51testing软件测试圈微信