主頁 >  其他 > WEB自動化-05-Cypress-元素互動

WEB自動化-05-Cypress-元素互動

2022-09-14 06:46:55 其他

5 元素互動

? ? 元素識別和操作是UI自動化測驗的基礎,下面一起來學習一下在Cypress中的元素互動操作吧,

5.1 元素定位器選擇

? ? 每一個測驗用例都包含對元素的定位識別和操作等,因為一個好的測驗用例,必須保證健壯和可靠的元素定位策略,在實際專案中,經常會遇到以下問題:

  • 元素ID或類是動態生成
  • 若使用CSS定位,而在實際開發程序中CSS或JS行為發生更改等

? ? 為避免出現以上失敗情況,我們可以采取以下策略

  • 不建議使用基于CSS屬性的定位方式,如id, class, tag
  • 不建議使用基于易發生變化的文本內容
  • 添加data-*屬性,使其更加容易定位元素

Cypress提供三個data-*屬性,分別是data-cydata-testdata-testid

? ? 我們來看一個示例:

<button
  id="main"
  
  name="submission"
  role="button"
  data-cy="submit"
>
  Submit
</button>

? ? 我們來看看以下幾種常見的元素定位方式:

定位方式 是否推薦 備注
cy.get('button').click() 不推薦 錯誤的定位方式,太簡單,沒有結合背景關系
cy.get('.btn.btn-large').click() 不推薦 CSS耦合性太高
cy.get('#main').click() 慎用 仍然依賴于CSS或JS事件(JS可以動態生成button)
cy.get('[name=submission]').click() 慎用 與HTML中name屬性耦合性太高
cy.contains('Submit').click() 可以使用 與文本內容耦合性比較高,若文本發生變化,則失敗
cy.get('[data-cy=submit]').click() 推薦 不依賴任何變更

data-*是Cypress提供的專有定位器,僅用于定位,且 data-*屬性與元素的行為或樣式無關,也就意味著即樣式和行為發生變化,也不影響測驗而出現失敗的情況產生,更詳細的檔案可以查看官網介紹:https://docs.cypress.io/guides/references/best-practices#Selecting-Elements

? ? 除了Cypress專有定位選擇器外,在不滿足data-*選擇器時,也可以使用以下幾種定位選擇器:

  • 1、id選擇器
cy.get('#main').click()
  • 2、class選擇器
cy.get('.btn.btn-large').click()
  • 3、attributes選擇器
cy.get('[name=submission]').click()
  • 4、:nth-child(n)選擇器

? ? :nth-child(n)選擇器匹配屬于其屬于父元素的第n個子元素且不管元素型別,

<form method="post" action="/post">
   <p>Customer name: <input name="custname"></p>
   <p>Telephone: <input type="tel" name="custtel"></p>
   <p>E-mail address: <input type="email" name="custemail"></p>
   <p>Delivery instructions: <textarea name="comments"></textarea></p>
   <p><button>Submit order</button></p>
</form>

? ? 針對以上HTML代碼片斷使用nth-child(n)選擇器定位代碼如下所示:

cy.get('p:nth-child(1) > input').type("Surpass")
  • 5、Cypress.$ 選擇器

? ? 針對一些比較難定位的元素,Cypress也可以使用jQuery選擇器來進行元素定位,示例代碼如下所示:

/// <reference types="cypress" />

describe('測驗jQuery定位器', () => {
    let baseUrl="https://www.baidu.com/";
    before(()=>{
        cy.visit(baseUrl);
    });
    it('測驗jQuery定位器用例-1', () => {
         let searchTextA="I love",searchTextB=" Surpass",searchButtonText="百度一下";
         cy.get("#kw").type(searchTextA).should("contain.value",searchTextA);
         let $el=Cypress.$("#kw")
         let selectorA=Cypress.SelectorPlayground.getSelector($el)
         cy.get(selectorA).type(searchTextB).should("contain.value",searchTextB)
         cy.get(selectorA).clear();
         let $elSearch=Cypress.$("#su")
         let selectorB=Cypress.SelectorPlayground.getSelector($elSearch);
         cy.get(selectorB).should("contain.value",searchButtonText);
    });
});

使用Cypress.$定位參考資料:https://docs.cypress.io/api/cypress-api/selector-playground-api#onElement-Callback

5.2 DOM互動

5.2.1 頁面元素查找

5.2.1.1 基本方法

? ? 在Cypress常見的用于頁面內元素查找的方法如下所示:

5.2.1.1.1 find方法

? ? find主要用于查找DOM 樹中被定位元素的后代,其基本語法如下所示:

.find(selector)
.find(selector, options)

? ? 示例HTML片斷如下所示:

<ul id="parent">
  <li ></li>
  <li ></li>
</ul>

? ? 其用法如下所示:

cy.get('#parent').find('li')
5.2.1.1.2 get方法

? ? get主要用于查找一個或多個DOM元素,其基本語法如下所示:

cy.get(selector)
cy.get(alias)
cy.get(selector, options)
cy.get(alias, options)

? ? 其用法如下所示:

// 查找input元素
cy.get('input').should('be.disabled')
// 查找li的第一個元素且屬于ul的后代
cy.get('ul li:first').should('have.class', 'active')
// 查找dropdown-menu元素并單擊
cy.get('.dropdown-menu').click()
// 查找屬性為test-example的元素
cy.get('[data-test-id="test-example"]').should('have.length', 5)
// 查找href屬性中包含questions的元素
cy.get('a[href*="questions"]').click()
// 支持正則,查找以local-開頭的元素
cy.get('[id^=local-]')
// 支持正則,查找以-remote結尾的元素
cy.get('[id$=-remote]')
// 支持正則,查找以local-開頭和以-remote結尾的元素
cy.get('[id^=local-][id$=-remote]')
5.2.1.1.3 contains方法

? ? contains主要用于查找包含特定文本的元素,其基本語法如下所示:

.contains(content)
.contains(content, options)
.contains(selector, content)
.contains(selector, content, options)

// ---or---

cy.contains(content)
cy.contains(content, options)
cy.contains(selector, content)
cy.contains(selector, content, options)
  • content

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的第一個包含apples的元素
cy.contains('apples')
  • value

? ? 示例HTML片斷如下所示:

<div id="main">
  <form>
    <div>
      <label>name</label>
      <input name="name" />
    </div>
    <div>
      <label>age</label>
      <input name="age" />
    </div>
    <input type="submit" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/submit the form!" />
  </form>
</div>

? ? 其用法如下所示:

cy.get('form').contains('submit the form!').click()
  • Number

? ? 示例HTML片斷如下所示:

<button  type="button">
  Messages <span >4</span>
</button>

? ? 其用法如下所示:

// 查找搜索到的第一個元素包含的數值
cy.contains(4)
  • 正則

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
</ul>

? ? 其用法如下所示:

// 查找搜索<li>bananas</li>
cy.contains(/^b\w+/)
  • selector

? ? 示例HTML片斷如下所示:

<html>
  <body>
    <ul>
      <li>apples</li>
      <li>oranges</li>
      <li>bananas</li>
    </ul>
  </body>
</html>

? ? 其用法如下所示:

// 查找搜索<ul>...</ul>
cy.contains('ul', 'apples')
  • subject

? ? 示例HTML片斷如下所示:

<form>
  <div>
    <label>name</label>
    <input name="name" />
  </div>
  <button type="submit">Proceed</button>
</form>

? ? 其用法如下所示:

cy.get('form') // 查找搜索 <form>...</form>
  .contains('form', 'Proceed') // 查找搜索 <form>...</form>
  .submit()  // 查找搜索 <form>...</form>
  • options

? ? 示例HTML片斷如下所示:

<div>Capital Sentence</div>

? ? 其用法如下所示:

cy.get('div').contains('capital sentence') // fail
cy.get('div').contains('capital sentence', { matchCase: false }) // pass

5.2.1.2 擴展方法

? ? 因WEB技術不斷更新發展,導致其應用程式也不斷變得復雜,單一手機的定位方法可能滿足不了要求,Cypress也提供一些擴展方法,用于更加精準定位元素,如下所示:

5.2.1.2.1 children方法

? ? children用于獲取指定DOM集合頁面中每個DOM的子元素,其基本語法如下所示:

.children()
.children(selector)
.children(options)
.children(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>About</li>
  <li>
    Services
    <ul >
      <li >Web Design</li>
      <li >Logo Design</li>
      <li >
        Print Design
        <ul >
          <li>Signage</li>
          <li>T-Shirt</li>
          <li>Business Cards</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Contact</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 [
//  <li >Web Design</li>,
//  <li >Logo Design</li>,
//  <li >Print Design</li>
// ]
cy.get('ul.secondary-nav').children()
  • selector

? ? 示例HTML片斷如下所示:

<div>
  <ul>
    <li >Unit Testing</li>
    <li>Integration Testing</li>
  </ul>
</div>

? ? 其用法如下所示:

// 查找搜索到的結果為[ <li >Unit Testing</li> ]
cy.get('ul').children('.active')
5.2.1.2.2 parents方法

? ? parents用于獲取指定DOM集合頁面中每個DOM的父元素,即以當元素為起點,一直到最頂級,其基本語法如下所示:

.parents()
.parents(selector)
.parents(options)
.parents(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul >
  <li>Overview</li>
  <li>
    Getting started
    <ul >
      <li>Install</li>
      <li >Build</li>
      <li>Test</li>
    </ul>
  </li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 [.sub-nav, li, .main-nav]
cy.get('li.active').parents()
  • selector

? ? 示例HTML片斷如下所示:

<ul >
  <li>Overview</li>
  <li>
    Getting started
    <ul >
      <li>Install</li>
      <li >Build</li>
      <li>Test</li>
    </ul>
  </li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為[.main-nav]
cy.get('li.active').parents('.main-nav')
5.2.1.2.3 parent方法

? ? parent用于獲取指定DOM集合頁面中每個DOM的第一層父元素即以當元素為起點,僅向上找一級(即找到爸爸輩即可),其基本語法如下所示:

.parent()
.parent(selector)
.parent(options)
.parent(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul >
  <li>Overview</li>
  <li>
    Getting started
    <ul >
      <li>Install</li>
      <li >Build</li>
      <li>Test</li>
    </ul>
  </li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 .sub-nav
cy.get('li.active').parent()
  • selector

? ? 示例HTML片斷如下所示:

<ul >
  <li>Overview</li>
  <li>
    Getting started
    <ul >
      <li>Install</li>
      <li >Build</li>
      <li>Test</li>
    </ul>
  </li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為.sub-nav
cy.get('li').parent('.sub-nav')
5.2.1.2.4 siblings方法

? ? siblings用于獲取指定DOM頁面中同層級元素即以當元素為起點,查找同級別元素(即找到兄弟輩即可),其基本語法如下所示:

.siblings()
.siblings(selector)
.siblings(options)
.siblings(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>Home</li>
  <li>Contact</li>
  <li >Services</li>
  <li>Price</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為[<li>Home</li> <li>Contact</li> <li>Price</li> ]
cy.get('.active').siblings()
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li>Home</li>
  <li>Contact</li>
  <li >Services</li>
  <li>Price</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li >Services</li>
cy.get('li').siblings('.active')
5.2.1.2.5 first方法

? ? first用于獲取指定DOM頁面中第一個元素,其基本語法如下所示:

.first()
.first(options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li >Knick knack on my thumb</li>
  <li >Knick knack on my shoe</li>
  <li >Knick knack on my knee</li>
  <li >Knick knack on my door</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li >Knick knack on my thumb</li>
cy.get('li').first()
5.2.1.2.6 last方法

? ? last用于獲取指定DOM頁面中最后一個元素,其基本語法如下所示:

.last()
.last(options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li >Knick knack on my thumb</li>
  <li >Knick knack on my shoe</li>
  <li >Knick knack on my knee</li>
  <li >Knick knack on my door</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li >Knick knack on my door</li>
cy.get('li').last()
5.2.1.2.7 next方法

? ? next用于獲取指定DOM頁面中同層級元素的下一個元素,即以當前元素為起點,向下查找一個元素,其基本語法如下所示:

.next()
.next(selector)
.next(options)
.next(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li >oranges</li>
  <li>bananas</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li>bananas</li>
cy.get('.second').next()

? ? 來看看以下的示例驗證程式看看會不會被繞暈,哈哈,如下所示:

<input list="fruit" />
<datalist id="fruit">
  <option>Apple</option>
  <option>Banana</option>
  <option>Cantaloupe</option>
</datalist>
cy.get('#fruit option')
  .first()
  .should('have.text', 'Apple')
  .next()
  .should('have.text', 'Banana')
  .next()
  .should('have.text', 'Cantaloupe')
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
  <li >pineapples</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li>pineapples</li>
cy.get('li').next('.selected')
5.2.1.2.8 nextAll方法

? ? nextAll用于獲取指定DOM頁面中匹配元素后的所有同層級元素,即以當前元素為起點,查找后續所有同層級元素,其基本語法如下所示:

.nextAll()
.nextAll(selector)
.nextAll(options)
.nextAll(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li >oranges</li>
  <li>bananas</li>
  <li>pineapples</li>
  <li>grapes</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為[<li>bananas</li>, <li>pineapples</li>, <li>grapes</li>]
cy.get('.second').nextAll()
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
  <li >pineapples</li>
  <li>grapes</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 <li>pineapples</li>
cy.get('li').nextAll('.selected')
5.2.1.2.9 nextUntil方法

? ? nextUntil用于獲取指定DOM頁面中指定范圍內的所有同層級元素,即以當前元素為起點,向后查找,遇到until指定的元素截止前的所有同層級元素,其基本語法如下所示:

.nextUntil(selector)
.nextUntil(selector, filter)
.nextUntil(selector, filter, options)
.nextUntil(element)
.nextUntil(element, filter)
.nextUntil(element, filter, options)
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li id="fruits" >Fruits</li>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
  <li id="veggies" >Vegetables</li>
  <li>cucumbers</li>
  <li>carrots</li>
  <li>corn</li>
  <li id="nuts" >Nuts</li>
  <li>walnuts</li>
  <li>cashews</li>
  <li>almonds</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 [<li>cucumbers</li>, <li>carrots</li>, <li>corn</li>]
cy.get('#veggies').nextUntil('#nuts')
5.2.1.2.10 prev方法

? ? prev用于獲取指定DOM頁面中同層級元素的上一個元素,即以當前元素為起點,向上查找一個元素,其基本語法如下所示:

.prev()
.prev(selector)
.prev(options)
.prev(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>Cockatiels</li>
  <li>Lorikeets</li>
  <li >Cockatoos</li>
  <li>Conures</li>
  <li>Eclectus</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為<li>Lorikeets</li>
cy.get('.active').prev()

? ? 示例HTML片斷如下所示:

<ul>
  <li>Cockatiels</li>
  <li>Lorikeets</li>
  <li >Cockatoos</li>
  <li>Conures</li>
  <li>Eclectus</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 <li>Cockatoos</li>
cy.get('li').prev('.active')
5.2.1.2.11 prevAll方法

? ? prevAll用于獲取指定DOM頁面中匹配元素前的所有同層級元素,即以當前元素為起點,查找前面所有同層級元素,其基本語法如下所示:

.prevAll()
.prevAll(selector)
.prevAll(options)
.prevAll(selector, options)
  • 不帶引數

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li >bananas</li>
  <li>pineapples</li>
  <li>grapes</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 [<li>apples</li>, <li>oranges</li>]
cy.get('.third').prevAll()
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
  <li >pineapples</li>
  <li>grapes</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為 <li>pineapples</li>
cy.get('li').prevAll('.selected')

prevAll查找前面所有同級元素,但如果添加了selector,則代表僅選擇一個

5.2.1.2.12 prevUntil方法

? ? prevUntil用于獲取指定DOM頁面中指定范圍內的所有同層級元素,即以當前元素為起點,向前查找,遇到until指定的元素截止前的所有同層級元素,其基本語法如下所示:

.prevUntil(selector)
.prevUntil(selector, filter)
.prevUntil(selector, filter, options)
.prevUntil(element)
.prevUntil(element, filter)
.prevUntil(element, filter, options)
  • selector

? ? 示例HTML片斷如下所示:

<ul>
  <li id="fruits" >Fruits</li>
  <li>apples</li>
  <li>oranges</li>
  <li>bananas</li>
  <li id="veggies" >Vegetables</li>
  <li>cucumbers</li>
  <li>carrots</li>
  <li>corn</li>
  <li id="nuts" >Nuts</li>
  <li>walnuts</li>
  <li>cashews</li>
  <li>almonds</li>
</ul>

? ? 其用法如下所示:

// 查找搜索到的結果為[<li>cucumbers</li>, <li>carrots</li>, <li>corn</li>]
cy.get('#nuts').prevUntil('#veggies')
5.2.1.2.13 each方法

? ? each用于遍歷帶有length屬性的物件,如陣列等,其基本語法如下所示:

.each(callbackFn)

? ? 其用法如下所示:

// 遍歷每個li
cy.get('ul>li').each(() => {...})
cy.get('li')
  .should('have.length', 3)
  .each(($li, index, $lis) => {
    return 'something else'
  })
  .then(($lis) => {
    expect($lis).to.have.length(3) // true
  })
5.2.1.2.14 eq方法

? ? eq用于獲取指定索引的元素(類似于nth-child(n)),其基本語法如下所示:

.eq(index)
.eq(indexFromEnd)
.eq(index, options)
.eq(indexFromEnd, options)
  • 正向index

? ? 示例HTML片斷如下所示:

<ul>
  <li>tabby</li>
  <li>siamese</li>
  <li>persian</li>
  <li>sphynx</li>
  <li>burmese</li>
</ul>

? ? 其用法如下所示:

cy.get('li').eq(1).should('contain', 'siamese') // true

索引起始值為0

  • 反向index

? ? 示例HTML片斷如下所示:

<ul>
  <li>tabby</li>
  <li>siamese</li>
  <li>persian</li>
  <li>sphynx</li>
  <li>burmese</li>
</ul>

? ? 其用法如下所示:

cy.get('li').eq(-2).should('contain', 'sphynx') // true
5.2.1.2.15 filter方法

? ? filter用于獲取匹配到的元素,其基本語法如下所示:

.filter(selector)
.filter(selector, options)
  • **selector*

? ? 示例HTML片斷如下所示:

<ul>
  <li>Home</li>
  <li >About</li>
  <li>Services</li>
  <li>Pricing</li>
  <li>Contact</li>
</ul>

? ? 其用法如下所示:

// 搜索到的結果為: <li>About</li>
cy.get('ul').find('>li').filter('.active')
  • contains-按文本

? ? 示例HTML片斷如下所示:

<ul>
  <li>Home</li>
  <li>Services</li>
  <li>Advanced Services</li>
  <li>Pricing</li>
  <li>Contact</li>
</ul>

? ? 其用法如下所示:

// 搜索到的結果為(包含Services的元素): <li>Services</li> <li>Advanced Services</li>
cy.get('li').filter(':contains("Services")').should('have.length', 2)
  • contains-非空格

? ? 示例HTML片斷如下所示:

<div data-testid="testattr">
  <span>Hello&nbsp;world</span>
</div>

? ? 其用法如下所示:

cy.get('[data-testid=testattr]').filter(':contains("Hello\u00a0world")')

5.3 可操作型別

5.3.1 click方法

? ? click主要用于單擊元素,其基本語法如下所示:

.click()
.click(options)
.click(position)
.click(position, options)
.click(x, y)
.click(x, y, options)

? ? option常見引數如下所示:

  • position(String)

? ? center是postion的默認位置,其他有效postion有:topLefttoptopRightleftcenterrightbottomLeftbottombottomRight,其示意圖如下所示:

  • x(Number)

? ? 元素離左邊(left)的距離,單位為像素

  • y(Number)

? ? 元素離上面(top)的距離,單位為像素

  • options(Object)
選項 默認值 備注
altKey false 是否激活Alt鍵,別名為:optionKey
ctrlKey false 是否激活Ctrl鍵,別名為:controlKey
shiftKey false 是否激活Shift鍵
metaKey false 如果是Windwos,是否激活Win鍵,如果是Mac,是否激活Command鍵,另外為:commandKey, cmdKey
multiple false 連續點擊多個元素
force false 強制單擊,忽略其元素狀態
  • 無引數

? ? 其用法如下所示:

cy.get('.nav > a').click()
  • position

? ? 其用法如下所示:

cy.get('img').click('topRight')
  • 坐標

? ? 其用法如下所示:

cy.get('#top-banner').click(15, 40)
  • options

? ? 其用法如下所示:

cy.get('.close').as('closeBtn')
cy.get('@closeBtn').click({ force: true })
cy.get('#footer .next').click(5, 60, { force: true })
// 點擊所有以btn開頭的元素
cy.get('[id^=btn]').click({ multiple: true })
  • 組合單擊

? ? 在單擊時,可以結合Alt、Ctrl、Shift、Win/Command鍵等,其用法如下所示:

// 使用Shift+Click
cy.get('li:first').click({
  shiftKey: true,
})

除了使用這種來組合單擊方式外,也可以type()

5.3.2 dbclick方法

? ? dbclick主要用于雙擊元素,其基本語法如下所示:

.dblclick()
.dblclick(options)
.dblclick(position)
.dblclick(position, options)
.dblclick(x, y)
.dblclick(x, y, options)

? ? option常見引數如下所示:

  • position(String)

? ? center是postion的默認位置,其他有效postion有:topLefttoptopRightleftcenterrightbottomLeftbottombottomRight,其示意圖如下所示:

  • x(Number)

? ? 元素離左邊(left)的距離,單位為像素

  • y(Number)

? ? 元素離上面(top)的距離,單位為像素

  • options(Object)
選項 默認值 備注
altKey false 是否激活Alt鍵,別名為:optionKey
ctrlKey false 是否激活Ctrl鍵,別名為:controlKey
shiftKey false 是否激活Shift鍵
metaKey false 如果是Windwos,是否激活Win鍵,如果是Mac,是否激活Command鍵,另外為:commandKey, cmdKey
multiple true 連續點擊多個元素
force false 強制單擊,忽略其元素狀態
  • 無引數

? ? 其用法如下所示:

cy.get('a#nav1').dblclick()
  • position

? ? 其用法如下所示:

cy.get('button').dblclick('bottom')
  • 坐標

? ? 其用法如下所示:

cy.get('button').dblclick(30, 10)
  • options

? ? 其用法如下所示:

cy.get('button').dblclick({ force: true })
cy.get('button').dblclick('topRight', { force: true })
cy.get('button').dblclick({ multiple: false })
  • 組合單擊

? ? 在雙擊時,可以結合Alt、Ctrl、Shift、Win/Command鍵等,其用法如下所示:

// 使用Shift+Click
cy.get('li:first').dblclick({
  altKey: true,
})

5.3.3 rightclick方法

? ? rightclick主要用于在元素上右擊,其基本語法如下所示:

.rightclick()
.rightclick(options)
.rightclick(position)
.rightclick(position, options)
.rightclick(x, y)
.rightclick(x, y, options)

? ? option常見引數如下所示:

  • position(String)

? ? center是postion的默認位置,其他有效postion有:topLefttoptopRightleftcenterrightbottomLeftbottombottomRight,其示意圖如下所示:

  • x(Number)

? ? 元素離左邊(left)的距離,單位為像素

  • y(Number)

? ? 元素離上面(top)的距離,單位為像素

  • options(Object)
選項 默認值 備注
altKey false 是否激活Alt鍵,別名為:optionKey
ctrlKey false 是否激活Ctrl鍵,別名為:controlKey
shiftKey false 是否激活Shift鍵
metaKey false 如果是Windwos,是否激活Win鍵,如果是Mac,是否激活Command鍵,另外為:commandKey, cmdKey
multiple false 連續點擊多個元素
force false 強制單擊,忽略其元素狀態
  • 無引數

? ? 其用法如下所示:

cy.get('#open-menu').rightclick()
  • position

? ? 其用法如下所示:

cy.get('#open-menu').rightclick('topRight')
  • 坐標

? ? 其用法如下所示:

cy.get('#open-menu').rightclick(15, 40)
  • options

? ? 其用法如下所示:

cy.get('#open-menu').rightclick({ force: true })
cy.get('#open-menu').rightclick('bottomLeft', { force: true })
cy.get('#open-menu').rightclick(5, 60, { force: true })
cy.get('.open-menu').rightclick({ multiple: true })
  • 組合單擊

? ? 在雙擊時,可以結合Alt、Ctrl、Shift、Win/Command鍵等,其用法如下所示:

// 使用Shift+Click
cy.get('.menu-item').rightclick({
  metaKey: true,
})

5.3.4 type方法

? ? type主要用于在元素物件輸入內容,其基本語法如下所示:

.type(text)
.type(text, options)

? ? type除了可以任意文本內容,也可以輸入特定的文本,表示一些特殊的功能,如下所示:

功能描述
{{} 輸入 {
{backspace} 洗掉游標左側字符
{del} 洗掉游標右側字符
{upArrow} 向上移動游標
{downArrow} 向下移動游標
{leftArrow} 向左移動游標
{rightArrow} 向右移動游標
{home} 移動游標至行首
{end} 移動游標至行尾
{enter} 按Enter鍵
{esc} 按ESC鍵
{insert} 在游標右側插入字符
{moveToEnd} 移動游標至可輸入物件的結尾處
{moveToStart} 移動游標至可輸入物件的開頭處
{pageDown} 向下滾動
{pageUp} 向上滾動
{selectAll} 通過創建范圍來全選所有文本
{alt} 激活Alt鍵
{ctrl} 激活Ctrl鍵
{meta} 如果是Windows,則激活Win鍵,如果是Mac,則激活Command鍵
{shift} 激活Shift鍵

? ? option常見引數如下所示:

選項 默認值 備注
delay 10 在按下按鍵后的延遲時間,單位為ms
force false 強制輸入,忽略其元素狀態
parseSpecialCharSequences true 是否決議{}中包含特定字串
release true 是否保持長按
  • 輸入文本

? ? 其用法如下所示:

cy.get('textarea').type('Hello Surpass')
  • 從datalist中選擇輸入

? ? 示例HTML片斷如下所示:

<input list="fruit" />
<datalist id="fruit">
  <option>Apple</option>
  <option>Banana</option>
  <option>Cantaloupe</option>
</datalist>

? ? 其用法如下所示:

cy.get('input').type('Apple')
  • 使用組合鍵輸入

? ? 其用法如下所示:

// 相當于人按Shift、Alt,再按住b鍵
cy.get('input').type('{shift+alt+b}hello')
  • 忽略特定的字符

? ? 如果想輸入{}這樣的字符,可以使用選項parseSpecialCharSequences

cy.get('#code-input')
  // 將不再決議{}里面的字符
  .type('function (num) {return num * num;}', {
    parseSpecialCharSequences: false,
  })

5.3.5 clear方法

? ? type主要用于清除輸入的文本內容,其基本語法如下所示:

.clear()
.clear(options)

? ? option常見引數如下所示:

選項 默認值 備注
force false 強制清除,忽略其元素狀態
  • 無引數

? ? 其用法如下所示:

cy.get('textarea').clear().type('Hello, Surpass')

5.3.6 check方法

? ? chekck主要用于選中單選框復選框,其基本語法如下所示:

.check()
.check(value)
.check(values)
.check(options)
.check(value, options)
.check(values, options)

value可以是String也可以是Array,符合條件,則全部選中,

? ? option常見引數如下所示:

選項 默認值 備注
force false 強制選中,忽略其元素狀態
  • 選中復選框
cy.get('[type="checkbox"]').check()
  • 選中單選框
cy.get('[type="radio"]').check()
  • 根據value(String)選中

? ? 示例HTML片斷如下所示:

<form>
  <input type="radio" id="ca-country" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/CA" />
  <label for="ca-country">Canada</label>
  <input type="radio" id="us-country" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/US" />
  <label for="us-country">United States</label>
</form>

? ? 其用法如下所示:

cy.get('[type="radio"]').check('US')
  • 根據value(Array)選中

? ? 示例HTML片斷如下所示:

<form>
  <input type="checkbox" id="subscribe" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/subscribe" />
  <label for="subscribe">Subscribe to newsletter?</label>
  <input type="checkbox" id="acceptTerms" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/accept" />
  <label for="acceptTerms">Accept terms and conditions.</label>
</form>

? ? 其用法如下所示:

cy.get('form input').check(['subscribe', 'accept'])
  • 選擇隱藏的Checkbox

? ? 其用法如下所示:

cy.get('.action-checkboxes')
  .should('not.be.visible') // Passes
  .check({ force: true })
  .should('be.checked') // Passes
  • 查找選中的Checkbox

? ? 示例HTML片斷如下所示:

<form id="pick-fruit">
  <input type="radio" name="fruit" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/orange" id="orange" />
  <input type="radio" name="fruit" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/apple" id="apple" checked="checked" />
  <input type="radio" name="fruit" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/banana" id="banana" />
</form>

? ? 其用法如下所示:

cy.get('#pick-fruit :checked').should('be.checked').and('have.value', 'apple')

5.3.7 uncheck方法

? ? chekck主要用于取消選中單選框復選框,其基本語法如下所示:

.uncheck()
.uncheck(value)
.uncheck(values)
.uncheck(options)
.uncheck(value, options)
.uncheck(values, options)

value可以是String也可以是Array,符合條件,則全部取消選中,

? ? option常見引數如下所示:

選項 默認值 備注
force false 強制取消選中,忽略其元素狀態
  • 取消選中復選框
cy.get(':checkbox').uncheck()
  • 取消選中單選框
cy.get('input[type="ratio"]').uncheck()
  • 根據value(String)取消選中

? ? 示例HTML片斷如下所示:

<form>
  <input type="radio" id="ca-country" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/CA" />
  <label for="ca-country">Canada</label>
  <input type="radio" id="us-country" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/US" />
  <label for="us-country">United States</label>
</form>

? ? 其用法如下所示:

cy.get('[type="radio"]').uncheck('US')
  • 根據value(Array)取消選中

? ? 示例HTML片斷如下所示:

<form>
  <input type="checkbox" id="subscribe" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/subscribe" />
  <label for="subscribe">Subscribe to newsletter?</label>
  <input type="checkbox" id="acceptTerms" value="https://www.cnblogs.com/surpassme/archive/2022/09/14/accept" />
  <label for="acceptTerms">Accept terms and conditions.</label>
</form>

? ? 其用法如下所示:

cy.get('form input').uncheck(['subscribe', 'accept'])

5.3.8 select方法

? ? select主要用于選擇下拉串列中一個選項,其基本語法如下所示:

.select(value)
.select(values)
.select(value, options)
.select(values, options)

value可以是String,Number也可以是Array,符合條件,則全部選中,

? ? option常見引數如下所示:

選項 默認值 備注
force false 強制選中其中一個項,忽略其元素狀態
  • 根據Text選擇

? ? 示例HTML片斷如下所示:

<select>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/456">apples</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/457">oranges</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/458">bananas</option>
</select>

? ? 其用法如下所示:

cy.get('select').select('apples').should('have.value', '456')
  • 根據Value選擇

? ? 示例HTML片斷如下所示:

<select>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/456">apples</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/457">oranges</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/458">bananas</option>
</select>

? ? 其用法如下所示:

cy.get('select').select('456').should('have.value', '456')
  • 根據Index選擇

? ? 示例HTML片斷如下所示:

<select>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/456">apples</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/457">oranges</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/458">bananas</option>
</select>

? ? 其用法如下所示:

cy.get('select').select(0).should('have.value', '456')
  • 選擇多個項

? ? 示例HTML片斷如下所示:

<select multiple>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/456">apples</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/457">oranges</option>
  <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/458">bananas</option>
</select>

? ? 其用法如下所示:

cy.get('select')
  .select(['apples', 'bananas'])
  .invoke('val')
  .should('deep.equal', ['456', '458'])
// 或
cy.get('select')
  .select([0, 1])
  .invoke('val')
  .should('deep.equal', ['456', '457'])
  • 選擇隱藏的select

? ? 示例HTML片斷如下所示:

<select style="display: none;">
  <optgroup label="Fruits">
    <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/banana">Banana</option>
    <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/apple">Apple</option>
  </optgroup>

  <optgroup></optgroup>
</select>

? ? 其用法如下所示:

cy.get('select')
  .select('banana', { force: true })
  .invoke('val')
  .should('eq', 'banana')
  • 選擇disabled的select

? ? 示例HTML片斷如下所示:

<select disabled>
  <optgroup label="Veggies">
    <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/okra">Okra</option>
    <option value="https://www.cnblogs.com/surpassme/archive/2022/09/14/zucchini">Zucchini</option>
  </optgroup>

  <optgroup></optgroup>
</select>

? ? 其用法如下所示:

cy.get('select')
  .select('okra', { force: true })
  .invoke('val')
  .should('eq', 'okra')
  • 根據選中狀態進行選擇

? ? 示例HTML片斷如下所示:

<select id="name">
  <option>Joe</option>
  <option>Mary</option>
  <option selected="selected">Peter</option>
</select>

? ? 其用法如下所示:

cy.get('select#name option:selected').should('have.text', 'Peter')

5.3.9 trigger方法

? ? trigger主要用于在DOM觸發事件,其基本語法如下所示:

.trigger(eventName)
.trigger(eventName, position)
.trigger(eventName, options)
.trigger(eventName, x, y)
.trigger(eventName, position, options)
.trigger(eventName, x, y, options)
  • 滑鼠事件
// 滑鼠移動到button上觸發
cy.get('button').trigger('mouseover')
// 模擬長按
cy.get('.target').trigger('mousedown')
cy.wait(1000)
cy.get('.target').trigger('mouseup')

5.4 常見操作

5.4.1 visit方法

? ? visit主要用于訪問網址,其基本語法如下所示:

cy.visit(url)
cy.visit(url, options)
cy.visit(options)

? ? option常見引數如下所示:

選項 默認值 備注
url null 要訪問的網址
method GET 訪問網址的方法,僅限GET和POST
body null 發送的請求體,如果是字串,則不做修改,如果是一個物件,將會進行URL Encode再發送, Content-Type: application/x-www-urlencoded
headers {} 發送的請求頭
timeout pageLoadTimeout 頁面加載超時時間
auth {} 添加基本驗證請求頭
qs null URL查詢引數

? ? 常用示例如下所示:

  • 常規用法
cy.visit('http://www.surpass.com')
// 添加頁面加載超時時間
cy.visit('http://www.surpass.com', { timeout: 30000 })
// 添加基本驗證頭
cy.visit('https://www.surpass.com/', {
  auth: {
    username: 'surpass',
    password: 'surpass',
  },
})
// 以上等同于:
cy.visit('https://surpass:[email protected]')
// 添加查詢引數
cy.visit('http://www.surpass.com/users', {
  qs: {
    username: 'surpass',
    age:28,
  },
})
// 以上等同于:
cy.visit('https://www.surpass.com?username=surpass&age=28')
  • 發送表單
cy.visit({
  url: 'http://www.surpass.com/login',
  method: 'POST',
  body: {
    name: 'surpass',
    email: '[email protected]',
  },
})

? ? 在實際專案中,通常主域名是不會發生變更的,一般變化較多的都是子域名,針對這種情況,Cypress可在cypress.json中配置baseUrl,在實際運行時,Cypress會自動加上,

{
  "baseUrl": "http://www.surpass.com"
}

? ? 在配置好baseUrl后,在使用cy.visit()寫法如下所示:

cy.visit("/register.html")
  • 訪問本地檔案

? ? 如果不提供主機域名或baseUrl未定義時,Cypress默認會自動嘗試向服務器請求并訪問指定的檔案,那如果要訪問的是本地檔案,Cypress也提供了相應的方法,如下所示:

/// <reference types="cypress" />

describe('訪問本地檔案場景示例', () => {
    // 默認向服務器發起請求
   it('訪問百度', () => {
       cy.visit("www.baidu.com");
       cy.get("#kw").type("Surpass").should("contain.value","Surpass");
   });
   // 訪問本地檔案,注意路徑的寫法,以cypress.json所在的路徑為根路徑
    it('訪問本地檔案用例',{baseUrl: null }, () => {
        cy.visit("./cypress/integration/3-Surpass-Test-Examples/testSelect/surpass.test.html",);
        cy.get(":nth-child(1) > input").type("I love surpass")
    });
});

訪問本地檔案時,需要使用相對根目錄的路徑,其根目錄路徑為生成cypress.json所在路徑

? ? 運行結果如下所示:

5.4.2 url方法

? ? url主要用于獲取當前訪問頁面的URL地址,其基本語法如下所示:

cy.url()
cy.url(options)

? ? option常見引數如下所示:

選項 默認值 備注
decode false 對URL進行解碼
timeout defaultCommandTimeout 決議URL的超時時間

? ? 常用用法示例如下所示:

  • 無引數
/// <reference types="cypress" />

describe("測驗URL方法",()=>{

    it('測驗用例-1', () => {
        cy.visit("https://www.baidu.com/");
        cy.url().should("contain","baidu");
        cy.visit("https://news.baidu.com");
        cy.url().should("contain","news.baidu.com");
    });
})

? ? 運行結果如下所示:

  • 決議URL編碼
/// <reference types="cypress" />

describe("測驗URL方法",()=>{
    it.only('URL解碼測驗用例', () => {
        // 搜索關鍵詞中使用中文漢字
        let url="https://www.baidu.com/s?wd=%E6%B1%89";
        cy.visit(url);
        cy.url({decode:true}).should("contain","漢");
    });
})

? ? 運行結果如下所示:

decode主要用于URL中包含非ASCII字符

5.4.3 title方法

? ? title主要用于獲取當前訪問頁面的title,其基本語法如下所示:

cy.title()
cy.title(options)

? ? 常用用法示例如下所示:

cy.visit("https://www.baidu.com/");
cy.title().should("eq","百度一下,你就知道");

5.4.4 reload方法

? ? reload主要用于重新加載當前頁面,其基本語法如下所示:

cy.reload()
cy.reload(forceReload)
cy.reload(options)
cy.reload(forceReload, options)

forceReload (Boolean):該引數主要用于判斷是否從cache中加載頁面,若為true,則不使用cache,重新向服務器發起請求

? ? 常用用法示例如下所示:

  • 無引數
cy.visit("https://www.baidu.com/");
cy.reload();
  • 使用force引數
cy.visit("https://www.baidu.com/");
cy.reload(true);

5.4.5 設定視窗大小

? ? 在Cypress運行時,默認視窗大小1000px*660px,如果想自定義視窗大小,則Cypress提供了兩種設定視窗大小的方法,分別如下所示:

  • 通過cypress.json設定
{
  "viewportWidth": 1920,
  "viewportHeight": 1080
}
  • 在運行時設定設定

? ? 如果要在運行時設定視窗大小,需要使用viewport方法,,其基本語法如下所示:

cy.viewport(width, height)
cy.viewport(preset, orientation)
cy.viewport(width, height, options)
cy.viewport(preset, orientation, options)

? ? 常見引數如下所示:

  • width(Number)

? ? 視窗寬度,單位為像素,其值必須為有限的非負數

  • height(Number)

? ? 視窗高度,單位為像素,其值必須為有限的非負數

  • preset(String)

? ? 根據現有已知設備,快速設定視窗大小,現有已知設備大小如下所示:

  • orientation(String)

? ? 設定螢屏的方向,默認值為portrait(縱向),也可以設定為landscape(橫向)

? ? 常用用法示例如下所示:

  • 設定視窗大小
cy.viewport(1920, 1080)
  • 根據preset設定視窗大小
cy.viewport('iphone-6')
  • 根據螢屏方向
cy.viewport('iphone-6', 'landscape')

使用Cypress設定視窗大小時,暫時不支持設定devicePixelRatio

5.4.6 前進和后退

? ? 在Cypress中對瀏覽器進行前進和后退的處理,是通過go方法來實作,其前進和后退依賴是瀏覽歷史中的URL記錄,其基本語法如下所示:

cy.go(direction)
cy.go(direction, options)

? ? 常見引數如下所示:

  • direction (String, Number)

? ? 表示后退主要使用back-1
? ? 表示前進主要使用forward1

? ? 常用用法示例如下所示:

  • 前進
cy.go('forward')
cy.go(1)
  • 后退
cy.go('back')
cy.go(-1)

5.4.7 元素可見/存在/不可操作

? ? 通過前面的學習,我們已經知道可以使用should進行斷言,但它也同時支持判斷元素是否可見是否存在是否可操作等,

  • 元素是否可見
cy.get('nav').should('be.visible')
  • 元素是否存在
cy.get('nav').should('not.exist')
cy.get('nav').should('exist')
  • 元素是否可操作
cy.get(':checkbox').should('be.disabled')

5.4.8 then方法

? ? then方法主要用于獲取前一個命令的回傳值,我們可以利用該特性,來獲取元素的值,其基本語法如下所示:

.then(callbackFn)
.then(options, callbackFn)

? ? 以下常見的用法:

  • 獲取元素文本值
cy.get("#su").then(($su)=>{
    let btnText=$su.attr("value");
    cy.log(`按鈕的文字是:${btnText}`);
});

? ? 運行結果如下所示:

5.4.9 clear方法

? ? clear方法主要用于清除ipnut輸入框和textarea中所輸入的文本內容,其基本語法如下所示:

.clear()
.clear(options)

? ? 以下常見的用法:

cy.get("#kw").type("I love Surpass").clear();
// 等價于
cy.get("#kw").type("I love Surpass").type("{selectall}{backspace}")

以上僅為Cypress提供的常用方法,更多方法可以查閱官方檔案 :https://docs.cypress.io/api/table-of-contents

原文地址:https://www.jianshu.com/p/9a45af9fa2be

本文同步在微信訂閱號上發布,如各位小伙伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

作者: Surpassme

來源: http://www.jianshu.com/u/28161b7c9995/

http://www.cnblogs.com/surpassme/

宣告:本文著作權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出 原文鏈接 ,否則保留追究法律責任的權利,如有問題,可發送郵件 聯系,讓我們尊重原創者著作權,共同營造良好的IT朋友圈,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/507219.html

標籤:其他

上一篇:VSCODE 配置遠程除錯環境

下一篇:JMeter 邏輯控制之IF條件控制器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more