Selenium自動化

定位元素

  • 利用ID定位
driver.find_element_by_id("xx")
  • 利用tag name定位
driver.find_element_by_tag_name("form")
  • 利用link text定位
driver.find_element_by_link_text("新聞")
  • 利用class name定位
driver.find_element_by_class_name("")
  • 利用name定位
driver.find_element_by_name("")
  • 利用css定位
driver.find_element_by_css_selector("")

Selenium自動化之高亮顯示

  • 目的:
在UI自動化的時候,有時候我們需要查看運行的過程。
為了更好的顯示這個過程,可以進行元素高亮,以顯眼的顏色來提示測試人員目前的操作在哪一步。
  • 解決方法;
使用js代碼來將元素的背景顏色和邊框顏色設(shè)置成綠色和紅色
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @創(chuàng)建時間: 2018/11/22 16:01
ele =  driver.find_element('id','xxx')          # 定位元素

driver.execute_script("arguments[0].setAttribute('style', arguments[1]);",ele, "background: green; border: 2px solid red;")       # 元素的背景色和邊框設(shè)置成綠色和紅色

ele.click()   # 元素高亮一般用于點擊事件之前,檢查元素定位是否正確,方便查看UI自動化的過程

Selenium妙招

利用select模塊處理下拉框

select提供了三種選擇某一項的方法

  1. select_by_index #通過索引定位
  2. select_by_value #通過value值定位
  3. select_by_visible_text #通過文本值定位

Selenium無法定位元素的9中解決方案

一、rame/iframe表單嵌套

  • WebDriver只能在一個頁面上對元素識別與定位,對于frame/iframe表單內(nèi)嵌的頁面元素?zé)o法直接定位
  • 解決方法:
xf = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(xf)

driver.switch_to.parent_frame() #切到父frame。影響性能。
driver.switch_to.default_content()  #跳回最外層到頁面

二、頁面跳轉(zhuǎn)到新的標(biāo)簽頁,或者彈出到警告框等

  • 解決方法:
driver.switch_to.window(window_handle)切換到新窗口。
首先獲取當(dāng)前窗口等句柄deiver.current_window_handle,接著打開彈出新窗口,獲得當(dāng)前打開的所有窗口的句柄driver.window_handles。
通過for循環(huán)遍歷handle,如果不等于第一次打開窗口的句柄,那么一定是新窗口的句柄,因為執(zhí)行過程只打開了兩個窗口;
改變條件,如果等于第一次打開窗口的句柄,那么可以切換回第一次打開的窗口。

三、使用Xpath或CSS定位

  • 如果一個元素沒有唯一屬性,那么我們可以一級一級向上查找,直到找到可以唯一定位元素的屬性,在向下查找其子元素
find_element_by_xpath("http://form[@id='form']/span[2]/input") #首先通過唯一標(biāo)識屬性id=form定位最外層元素,接著找到最外層元素下的第2個span標(biāo)簽為父元素,最后向下查找定位到父元素下標(biāo)簽為input的子元素。
  • 如果一個元素不能唯一的區(qū)分一個元素,那么使用多個屬性來唯一地定位一個元素。
find_element_by_xpath('//input[@id='kw' and @class='su']/span/input)    #首先找到標(biāo)簽為input,id=kw且class=su的元素,接著找到其下標(biāo)簽為span的子元素,繼續(xù)向下查找找到標(biāo)簽為input的子元素。
  • 檢查Xpath描述是否有誤,導(dǎo)致無法定位到元素。

四、頁面還沒有加載出來,就對頁面上到元素進行操作。

  • time.sleep()

五、元素被遮擋,不可用,不可見

  • 方法1:
driver.maximize_window() #由于窗口大小改變引起的頁面元素布局發(fā)生變化,被測元素被遮擋,可以先將窗口最大化,再進行元素定位
  • 方法2:
.is_enabled()   #由于業(yè)務(wù)原因元素在某些情況下不可用(元素屬性disabled,灰顯),首先檢查測試步驟是否符合業(yè)務(wù)邏輯,其次確認(rèn)是否為業(yè)務(wù)流程上的Bug。
  • 方法3:
.is_displayed() 對于屬性不一定可見的元素,在定位前首先判斷其屬性是否可見,是否被隱藏。

使用WebDriver調(diào)用JavaScript代碼代替無法實現(xiàn)到功能

"""選擇日期"""
day = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
# 去掉開始日期元素的readonly屬性
js = 'document.getElementById("beginDate").removeAttribute("readonly");'
driver.execute_script(js)
# 清空文本后輸入值
driver.find_element_by_id("beginDate").clear()
driver.find_element_by_id("beginDate").send_keys(day)
WX20190820-154834@2x.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容