使用layui中的彈出層(layer)關閉iframe彈出層時,有時候可能會遇到關閉方法失效的問題。為了解決這個問題,我們可以按照以下步驟逐步排查。確保layui和layer的正確引入,檢查瀏覽器開發者工具中是否有任何錯誤消息。確認關閉代碼執行時機是否正確,可以使用console.log輸出信息進行調試。檢查父頁面是否正確配置了 layui,包括樣式和腳本。確保獲取index的方式正確,可以嘗試使用 parent.layui.layer而非parent.layer。
如果問題仍未解決,可以考慮使用延遲關閉操作,確保彈出層完全加載和渲染。同時,檢查彈出層頁面的 HTML 結構是否正確,避免意外的 HTML 錯誤。嘗試使用 parent.layer.closeAll('iframe') 關閉所有 iframe 彈出層,而不僅僅是關閉一個。
使用了 layui 中的彈出層(layer)來關閉一個包含在 iframe 中的彈出層。如果這段代碼在某些情況下失效,可能有幾個原因需要檢查:
如果上邊的方法還是解決不了問題,可以試一下以下的調試和排查步驟:
使用 調試: 在關閉彈出層的代碼前后插入 語句,輸出相關信息,以確保代碼執行到正確的位置。例如:
var index=parent.layer.getFrameIndex(window.name);
console.log("Index:", index);
parent.layer.close(index);
console.log("Closing the layer");
然后在瀏覽器的控制臺中查看這些輸出,以確定是否存在問題。
parent.layer.closeAll('iframe');
站html頁面中包含iframe的操作
一個HTML頁面可以有一個或多個子框架,這些子框架以<iframe>來標記
iframe是內嵌的網頁元素,也可以說是內嵌的框架
iframe標記又叫浮動幀標記,可以用它將一個HTML文檔嵌入在一個HTML中顯示。它和Frame標記的最大區別是在網頁中嵌入 的<Iframe></Iframe>所包含的內容與整個頁面是一個整體,而<Frame>< /Frame>所包含的內容是一個獨立的個體,是可以獨立顯示的。
另外,應用Iframe還可以在同一個頁面中多次顯示同一內容,而不必重復這段內 容的代碼。
1.獲取子頁面
2.方法調用
3.獲取元素
先使用switch_to.alert切換到瀏覽器彈出框
再使用alert類的操作方法:
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
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
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()中輸入的是 " 自動化測試 " 然后點擊 " 確定 " ,頁面顯示的就是我輸入的返回值:
以上總結或許能幫助到你,或許幫助不到你,但還是希望能幫助到你,如有疑問、歧義,評論區留言會及時修正發布,謝謝!
未完,待續…
一直都在努力,希望您也是!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。