<Text>:元素是input標(biāo)簽但是不能輸入內(nèi)容
第五個input輸入框,disabled
屬性被設(shè)置為 "true"。
它被禁用了無法接收用戶的輸入。
第六個input輸入框,readonly
屬性指示該元素是否只讀,如果設(shè)置了該屬性,表示該元素只讀不可編輯。因此,當(dāng)readonly
屬性存在時,該輸入框是不可編輯的,不能輸入內(nèi)容。
?實例圖示如下:
這里我們可以使用使用execute_script
方法來執(zhí)行JavaScript腳本,從而移除元素的disabled
和readonly
屬性,然后輸入內(nèi)容。具體代碼如下:
# 使用execute_script處理元素的disabled和readonly屬性
d.execute_script("arguments[0].removeAttribute('disabled')", d.find_element(By.NAME, "textdisabled"))
d.execute_script("arguments[0].removeAttribute('readonly')", d.find_element(By.NAME, "textreadonly"))
d.find_element(By.NAME, "textdisabled").send_keys("第五個輸入內(nèi)容")
d.find_element(By.NAME, "textreadonly").send_keys("第六個輸入內(nèi)容")
這樣就解決了元素是input標(biāo)簽但是不能輸入的問題了。
<textarea>:輸入框在form表單下處于同一級別,右邊紅框兩個textarea標(biāo)簽對應(yīng)左邊綠框兩個多行輸入框。由于第二個多行輸入框只有textarea標(biāo)簽可以定位,與第一個不好區(qū)分,這里就只能采用XPATH方法了。
具體代碼如下:
d.find_element(By.NAME,'ta1').send_keys('多行輸入框內(nèi)容1')
d.find_element(By.XPATH,'//form[@name="f1"]/textarea[2]').send_keys('多行輸入框內(nèi)容2')
Checkbox : 復(fù)選框定位
根據(jù)右側(cè)HTML發(fā)現(xiàn)第四個復(fù)選框其實value沒有賦值,所以只能只用XPATH定位。具體代碼如下:
d.find_element(By.CSS_SELECTOR,'input[value="cv1"]').click()
d.find_element(By.CSS_SELECTOR,'input[value="cv2"]').click()
d.find_element(By.CSS_SELECTOR,'input[value="cv3"]').click()
d.find_element(By.XPATH,'//form/input[4]').click()
Radio :單選框定位
這里兩個單選框都有name屬性,但對應(yīng)的值是一樣的,所以這里我們采用CSS_SELECTOR方法進(jìn)行定位,代碼如下:
d.find_element(By.CSS_SELECTOR,'input[value="rv1"]').click()
d.find_element(By.CSS_SELECTOR,'input[value="rv2"]').click()
以下是后面會更新的內(nèi)容,今天就到此為止了。后續(xù)有時間再持續(xù)更新~
Password:密碼框
經(jīng)觀察發(fā)現(xiàn)這兩個密碼框已經(jīng)不在初始化界面之內(nèi)了,需要拖動瀏覽器右側(cè)邊的滑動條才能顯示出來,否則將會找不到元素。
第一個密碼框很好定位,可以直接用NAME方法來定位,但是第二個沒有唯一的屬性,只能使用XPATH了。注意這里的標(biāo)簽的索引位置是從1開始數(shù)。如圖:
#第一個密碼框,輸入內(nèi)容:1
driver.find_element(By.NAME,'p1').send_keys('1')
# 定位到密碼框的第二個元素
pwdinput= driver.find_element(By.XPATH, '//form[@name="f1"]/input[8]')
# 使用JavaScript代碼將元素滾動到可視區(qū)域
driver.execute_script("arguments[0].scrollIntoView();", pwdinput)
# 輸入內(nèi)容:12
pwdinput.send_keys('12')
這里需分成三步執(zhí)行,開始我寫成一句直接報錯。代碼如下:
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element(By.XPATH, '//form[@name="f1"]/input[8]').send_keys('12'))
#報錯:selenium.common.exceptions.JavascriptException: Message: A JavaScript exception occured: null is not an object (evaluating 'arguments[0].scrollIntoView')
代碼中依然遇到了JavaScript異常,錯誤信息表明arguments[0]
的值為null
,導(dǎo)致無法調(diào)用scrollIntoView
方法。所以拆分成三步,1.首先定位元素,2.然后將其滾動到可視區(qū)域,3.最后再執(zhí)行send_keys
操作。并且還需要注意,send_keys
操作應(yīng)該在輸入框元素成功滾動到可視區(qū)域之后進(jìn)行。
Select:選擇框
首先,我們導(dǎo)入Select模塊。
from selenium.webdriver.support.ui import Select, WebDriverWait
?根據(jù)圖示,要先拖動滑動條才能顯示該元素,然后再進(jìn)行操作選擇框。?代碼如下:
#定位該元素
find_slt = driver.find_element(By.XPATH, '//form[@name="f1"]/select[1]')
#使用JavaScript代碼將元素滾動到可視區(qū)域
driver.execute_script("arguments[0].scrollIntoView();", find_slt)
# 使用Select方法
Select(driver.find_element(By.XPATH,'//form[@name="f1"]/select[2]')).select_by_index(2)
Select(driver.find_element(By.XPATH,'//form[@name="f1"]/select[3]')).select_by_index(2)
Select類中相關(guān)方法具體詳見:?Select類中相關(guān)方法
Button:按鈕
操作代碼如下:?
b=driver.find_element(By.CSS_SELECTOR,'[value="button value"]')
#由于這里的按鈕只有點(diǎn)擊效果,沒有直觀的反饋。增加了判斷。
if b.is_enabled():
b.click()
print("Button clicked!")
else:
print("Button is not enabled")
Reset Button:重置按鈕
find_rbutton=driver.find_element(By.XPATH,'//form[@name="f1"]/input[13]')
# 使用JavaScript代碼將元素滾動到可視區(qū)域
driver.execute_script("arguments[0].scrollIntoView();", find_rbutton)
#先填入內(nèi)容在輸入框內(nèi)
find_rbutton.send_keys('XPP 是攝影獅??')
#定義一個變量來獲取輸入的內(nèi)容,便于后面判斷。
gettext=find_rbutton.get_attribute('value')
#點(diǎn)擊重置
driver.find_element(By.CSS_SELECTOR,'[value="Reset Me"]').click()
#判斷內(nèi)容是否被清空
reset_text = find_rbutton.get_attribute('value')
if gettext == reset_text:
print("輸入內(nèi)容已被已清空")
else:
print('輸入內(nèi)容未被清空')
按鈕雙擊?
需要先導(dǎo)入ActionChains模塊
from selenium.webdriver import ActionChains
#拖動滑動條到可以顯示該元素為止
find_botton1=driver.find_element(By.XPATH,'//button[text()="Button Two"]')
driver.execute_script("arguments[0].scrollIntoView();",find_botton1)
#雙擊
ActionChains(driver).double_click(find_botton1).perform()
Submit:提交按鈕
#找到該元素
find_submit=driver.find_element(By.CSS_SELECTOR,'[value="Add"]')
driver.execute_script("arguments[0].scrollIntoView();",find_submit)
#點(diǎn)擊提交按鈕
find_submit.click()
#這時候出現(xiàn)alert彈框,添加一個顯示等待
WebDriverWait(driver, 10).until(EC.alert_is_present())
#切換到彈框
submit_alert=driver.switch_to.alert
#關(guān)閉彈框
submit_alert.accept()
Image:(待招商)文章來源:http://www.zghlxwxcb.cn/news/detail-802415.html
Search:待招商)文章來源地址http://www.zghlxwxcb.cn/news/detail-802415.html
到了這里,關(guān)于【UI自動化】selenium元素定位各種框?qū)嵗僮鞔笕奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!