整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          快速解決layui彈出層關閉iframe失效的問題!

          快速解決layui彈出層關閉iframe失效的問題!排查與優化方法

          使用layui中的彈出層(layer)關閉iframe彈出層時,有時候可能會遇到關閉方法失效的問題。為了解決這個問題,我們可以按照以下步驟逐步排查。確保layui和layer的正確引入,檢查瀏覽器開發者工具中是否有任何錯誤消息。確認關閉代碼執行時機是否正確,可以使用console.log輸出信息進行調試。檢查父頁面是否正確配置了 layui,包括樣式和腳本。確保獲取index的方式正確,可以嘗試使用 parent.layui.layer而非parent.layer。

          如果問題仍未解決,可以考慮使用延遲關閉操作,確保彈出層完全加載和渲染。同時,檢查彈出層頁面的 HTML 結構是否正確,避免意外的 HTML 錯誤。嘗試使用 parent.layer.closeAll('iframe') 關閉所有 iframe 彈出層,而不僅僅是關閉一個。

          使用了 layui 中的彈出層(layer)來關閉一個包含在 iframe 中的彈出層。如果這段代碼在某些情況下失效,可能有幾個原因需要檢查:

          1. 確保 layui 和 layer 的正確引入: 確保你的頁面正確引入了 layui 和 layer 的相關文件,包括樣式和腳本。這可以通過檢查瀏覽器的開發者工具中的網絡面板來確認。
          2. 確保代碼執行時機正確: 確保這段關閉彈出層的代碼是在彈出層頁面的 JavaScript 中執行的。你可以使用瀏覽器的開發者工具中的控制臺來查看是否有任何 JavaScript 錯誤。
          3. 檢查父頁面是否包含 layui 的相關配置: 確保在父頁面中正確配置了 layui,包括相關的樣式和腳本。layer 的功能是基于 layui 的,如果 layui 沒有正確初始化,layer 也可能無法正常工作。
          4. 確保獲取 index 的方式正確: 你的代碼中使用了 parent.layer.getFrameIndex(window.name) 來獲取 index,確保這個方法返回的是正確的 index。你可以在控制臺中輸出 index 來進行調試。
          5. 嘗試使用不同的關閉方法: 除了使用 parent.layer.close(index) 關閉彈出層,你還可以嘗試其他方法,比如 parent.layer.closeAll(),以確保關閉操作生效。

          如果上邊的方法還是解決不了問題,可以試一下以下的調試和排查步驟:

          使用 調試: 在關閉彈出層的代碼前后插入 語句,輸出相關信息,以確保代碼執行到正確的位置。例如:

          var index=parent.layer.getFrameIndex(window.name);

          console.log("Index:", index);

          parent.layer.close(index);

          console.log("Closing the layer");

          然后在瀏覽器的控制臺中查看這些輸出,以確定是否存在問題。

          1. 檢查瀏覽器控制臺錯誤: 打開瀏覽器的開發者工具,切換到控制臺選項卡,查看是否有任何 JavaScript 錯誤消息。錯誤消息可能會提供有關問題的更多信息。
          2. 確認彈出層是否成功獲取 index: 使用 輸出獲取的 index,確保它是一個有效的數字。如果獲取 index 的過程失敗,關閉操作可能會出錯。
          3. 檢查父頁面中的其他可能影響的腳本: 如果在父頁面中有其他可能干擾的 JavaScript 代碼,可能會影響彈出層的關閉操作。嘗試暫時禁用其他腳本,看看是否有改善。
          4. 考慮異步加載的情況: 如果彈出層的內容是通過異步加載的,確保關閉操作在內容加載完成后執行。可以在內容加載完成的回調中執行關閉操作。
          5. 查看 Layer 文檔和版本: 確保你正在使用的 layui 版本與你查看的文檔相匹配。某些版本可能存在一些變化,需要相應地調整代碼。
          6. 確保頁面結構正確: 檢查彈出層頁面的 HTML 結構是否正確。確保沒有意外的閉合標簽或其他 HTML 錯誤,這可能導致 JavaScript 代碼執行失敗。
          7. 嘗試延遲關閉操作: 在獲取 index 后,嘗試延遲一段時間再執行關閉操作,以確保彈出層完全加載和渲染。例如:


          8. 這可以幫助排除可能的異步加載問題。
          9. setTimeout(function() {
          10. parent.layer.close(index);
          11. }, 1000); // 延遲 1 秒鐘
          12. 使用 而非 : 在一些 layui 版本中, 可能不是最佳的選擇,嘗試使用 :
          13. var index=parent.layui.layer.getFrameIndex(window.name);
          14. parent.layui.layer.close(index);
          15. 確保 layui 對象被正確引入。
          16. 查看 layui 版本兼容性: 檢查 layui 的版本是否與使用的代碼和文檔一致。有時候,一些 layui 的版本可能引入了不同的 API 或有一些變化,需要根據版本進行調整。
          17. 使用 parent.layer.closeAll('iframe'): 嘗試使用 closeAll 方法關閉所有 iframe 彈出層,而不是僅關閉指定的一個。這樣可以確保關閉所有彈出層,包括當前的 iframe 彈出層。

          parent.layer.closeAll('iframe');

          站html頁面中包含iframe的操作

          一個HTML頁面可以有一個或多個子框架,這些子框架以<iframe>來標記

          iframe是內嵌的網頁元素,也可以說是內嵌的框架

          iframe標記又叫浮動幀標記,可以用它將一個HTML文檔嵌入在一個HTML中顯示。它和Frame標記的最大區別是在網頁中嵌入 的<Iframe></Iframe>所包含的內容與整個頁面是一個整體,而<Frame>< /Frame>所包含的內容是一個獨立的個體,是可以獨立顯示的。

          另外,應用Iframe還可以在同一個頁面中多次顯示同一內容,而不必重復這段內 容的代碼。

          1.獲取子頁面

          2.方法調用

          3.獲取元素

          avaScript 彈出框處理


          js彈出框的方法使用:

          先使用switch_to.alert切換到瀏覽器彈出框

          再使用alert類的操作方法:

          • dismiss():取消
          • accept():確定
          • text():獲取彈框中的文本信息
          • send_keys():往彈框中輸入文本信息


          js之:Alerts彈框:

          
          import time
          from selenium import webdriver
          from selenium.webdriver.support.wait import WebDriverWait
          from selenium.webdriver.support import expected_conditions as EC
          from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
          
          
          desired_capabilities=DesiredCapabilities.CHROME
          desired_capabilities['pageLoadStrategy']='normal'
          driver=webdriver.Chrome()
          start_time=time.time()
          driver.get('https://www.selenium.dev/documentation/en/webdriver/js_alerts_prompts_and_confirmations/')
          end_time=time.time() - start_time
          print(end_time)
          driver.find_element_by_xpath("//a[contains(text(),'See an example alert')]").click()
          WebDriverWait(driver, 10).until(EC.alert_is_present())
          alert=driver.switch_to.alert
          text_info=alert.text
          print(text_info)
          alert.accept()
          time.sleep(10)
          driver.quit()
          
          

          控制臺顯示了js彈框中的文本信息:

          
          F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
          17.46286106109619
          Sample alert
          
          Process finished with exit code 0
          




          js之:Confirm彈框:

          
          import time
          from selenium import webdriver
          from selenium.webdriver.support.wait import WebDriverWait
          from selenium.webdriver.support import expected_conditions as EC
          from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
          
          desired_capabilities=DesiredCapabilities.CHROME
          desired_capabilities['pageLoadStrategy']='normal'
          driver=webdriver.Chrome()
          start_time=time.time()
          driver.get('https://www.selenium.dev/documentation/en/webdriver/js_alerts_prompts_and_confirmations/')
          end_time=time.time() - start_time
          print(end_time)
          driver.find_element_by_css_selector(
              "section:nth-child(2) div.padding.highlightable:nth-child(2) div:nth-child(3) p:nth-child(8) > a.highlight").click()
          WebDriverWait(driver, 10).until(EC.alert_is_present())
          alert=driver.switch_to.alert
          text_info=alert.text
          print(text_info)
          alert.dismiss()
          time.sleep(10)
          driver.quit()
          
          

          控制臺顯示了js彈框中的文本信息:

          
          F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
          31.936458826065063
          Are you sure?
          
          Process finished with exit code 0
          


          js之:Prompt彈框:

          
          import time
          from selenium import webdriver
          from selenium.webdriver.support.wait import WebDriverWait
          from selenium.webdriver.support import expected_conditions as EC
          from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
          
          desired_capabilities=DesiredCapabilities.CHROME
          desired_capabilities['pageLoadStrategy']='normal'
          driver=webdriver.Chrome()
          start_time=time.time()
          driver.get('https://www.w3school.com.cn/tiy/t.asp?f=js_prompt')
          driver.find_element_by_css_selector(
              "body:nth-child(2) div:nth-child(2) ul:nth-child(1) li:nth-child(4) > a:nth-child(1)").click()
          iframe=driver.find_element_by_xpath("//iframe[@id='iframeResult']")
          driver.switch_to.frame(iframe)
          driver.find_element_by_css_selector("body:nth-child(2) > button:nth-child(2)").click()
          WebDriverWait(driver, 10).until(EC.alert_is_present())
          alert=driver.switch_to.alert
          alert.send_keys("自動化測試")
          time.sleep(2)
          alert.accept()
          
          


          注意:敲黑板并劃重點:

          alert.send_key()輸入的數據,是不會把彈框中的默認參數替換掉的


          所以百度了一個能看到alert彈框返回值的栗子:

          首先我在send_key()中輸入的是 " 自動化測試 " 然后點擊 " 確定 " ,頁面顯示的就是我輸入的返回值:


          以上總結或許能幫助到你,或許幫助不到你,但還是希望能幫助到你,如有疑問、歧義,評論區留言會及時修正發布,謝謝!


          未完,待續…
          一直都在努力,希望您也是!


          主站蜘蛛池模板: 韩国精品福利一区二区三区| 国产精品亚洲一区二区三区 | 国产婷婷一区二区三区| 久久se精品动漫一区二区三区| 国产麻豆精品一区二区三区v视界 国产美女精品一区二区三区 | 亚洲国产视频一区| 视频一区在线播放| 午夜性色一区二区三区免费不卡视频| 久久久久人妻一区精品| 精品国产一区二区三区不卡 | 国产日韩精品一区二区三区 | 97人妻无码一区二区精品免费| 国产一区二区精品久久岳| 日韩精品久久一区二区三区 | 精品国产一区二区三区久久狼| 日韩一区二区在线播放| 在线精品国产一区二区| 久久精品道一区二区三区| 国产乱码精品一区二区三区中文| 风流老熟女一区二区三区| 美女视频一区二区三区| 国产精品一区二区在线观看| 精品亚洲福利一区二区| 精品国产区一区二区三区在线观看 | 精品欧美一区二区在线观看| 97一区二区三区四区久久 | 国产成人精品一区二区三在线观看| 波多野结衣久久一区二区| 在线精品一区二区三区| 亚洲性无码一区二区三区| 国产精品成人免费一区二区| 海角国精产品一区一区三区糖心| 九九无码人妻一区二区三区| 国产综合无码一区二区色蜜蜜| 日本v片免费一区二区三区 | 国产精品亚洲一区二区三区 | 国产精品被窝福利一区| 99久久精品费精品国产一区二区| 插我一区二区在线观看| 性色A码一区二区三区天美传媒| 一区二区中文字幕|