• 關閉

    Selenium元素定位各種框實例操作大全

    發表于:2024-1-31 09:24

    字體: | 上一篇 | 下一篇 | 我要投稿

     作者:King老師    來源:CSDN

      <Text>:元素是input標簽但是不能輸入內容。
      第五個input輸入框,disabled屬性被設置為 "true"。它被禁用了無法接收用戶的輸入。
      第六個input輸入框,readonly屬性指示該元素是否只讀,如果設置了該屬性,表示該元素只讀不可編輯。因此,當readonly屬性存在時,該輸入框是不可編輯的,不能輸入內容。
       實例圖示如下:
      這里我們可以使用使用execute_script方法來執行JavaScript腳本,從而移除元素的disabled和readonly屬性,然后輸入內容。具體代碼如下:
      # 使用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("第五個輸入內容")
      d.find_element(By.NAME, "textreadonly").send_keys("第六個輸入內容")
      這樣就解決了元素是input標簽但是不能輸入的問題了。
      <textarea>:輸入框在form表單下處于同一級別,右邊紅框兩個textarea標簽對應左邊綠框兩個多行輸入框。由于第二個多行輸入框只有textarea標簽可以定位,與第一個不好區分,這里就只能采用XPATH方法了。
      具體代碼如下:
      d.find_element(By.NAME,'ta1').send_keys('多行輸入框內容1')
      d.find_element(By.XPATH,'//form[@name="f1"]/textarea[2]').send_keys('多行輸入框內容2')
      Checkbox :復選框定位
      根據右側HTML發現第四個復選框其實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屬性,但對應的值是一樣的,所以這里我們采用CSS_SELECTOR方法進行定位,代碼如下:
      d.find_element(By.CSS_SELECTOR,'input[value="rv1"]').click()
      d.find_element(By.CSS_SELECTOR,'input[value="rv2"]').click()
      以下是后面會更新的內容,今天就到此為止了。后續有時間再持續更新~
      Password:密碼框。
      經觀察發現這兩個密碼框已經不在初始化界面之內了,需要拖動瀏覽器右側邊的滑動條才能顯示出來,否則將會找不到元素。
      第一個密碼框很好定位,可以直接用NAME方法來定位,但是第二個沒有唯一的屬性,只能使用XPATH了。注意這里的標簽的索引位置是從1開始數。如圖:
      #第一個密碼框,輸入內容:1
      driver.find_element(By.NAME,'p1').send_keys('1')
      # 定位到密碼框的第二個元素
      pwdinput= driver.find_element(By.XPATH, '//form[@name="f1"]/input[8]')
      # 使用JavaScript代碼將元素滾動到可視區域
      driver.execute_script("arguments[0].scrollIntoView();", pwdinput)
      # 輸入內容:12
      pwdinput.send_keys('12')
      這里需分成三步執行,開始我寫成一句直接報錯。代碼如下:
      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,導致無法調用scrollIntoView方法。所以拆分成三步,1.首先定位元素,2.然后將其滾動到可視區域,3.最后再執行send_keys操作。并且還需要注意,send_keys操作應該在輸入框元素成功滾動到可視區域之后進行。
      Select:選擇框
      首先,我們導入Select模塊。
      from selenium.webdriver.support.ui import Select, WebDriverWait
       根據圖示,要先拖動滑動條才能顯示該元素,然后再進行操作選擇框。 代碼如下:
      #定位該元素
      find_slt = driver.find_element(By.XPATH, '//form[@name="f1"]/select[1]')
      #使用JavaScript代碼將元素滾動到可視區域
      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類中相關方法具體詳見: Select類中相關方法
      Button:按鈕
      操作代碼如下: 
      b=driver.find_element(By.CSS_SELECTOR,'[value="button value"]')
      #由于這里的按鈕只有點擊效果,沒有直觀的反饋。增加了判斷。
      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代碼將元素滾動到可視區域
      driver.execute_script("arguments[0].scrollIntoView();", find_rbutton)
      #先填入內容在輸入框內
      find_rbutton.send_keys('XPP 是攝影獅??')
      #定義一個變量來獲取輸入的內容,便于后面判斷。
      gettext=find_rbutton.get_attribute('value')
      #點擊重置
      driver.find_element(By.CSS_SELECTOR,'[value="Reset Me"]').click()
      #判斷內容是否被清空
      reset_text = find_rbutton.get_attribute('value')
      if gettext == reset_text:
          print("輸入內容已被已清空")
      else:
          print('輸入內容未被清空')
      按鈕雙擊 
      需要先導入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)
      #點擊提交按鈕
      find_submit.click()
      #這時候出現alert彈框,添加一個顯示等待
      WebDriverWait(driver, 10).until(EC.alert_is_present())
      #切換到彈框
      submit_alert=driver.switch_to.alert
      #關閉彈框
      submit_alert.accept()
      本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理
    《2023軟件測試行業現狀調查報告》獨家發布~

    關注51Testing

    聯系我們

    快捷面板 站點地圖 聯系我們 廣告服務 關于我們 站長統計 發展歷程

    法律顧問:上海蘭迪律師事務所 項棋律師
    版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2024
    投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

    滬ICP備05003035號

    滬公網安備 31010102002173號

    久久97久久97精品免视_欧洲国产伦久久久久久_91麻豆精品国产自产在线观_伊人久久大香线蕉综合av