Selenium/WebDriver switch_to parent_frame/default_content 返回 None
Selenium/WebDriver switch_to parent_frame/default_content returning None
我有以下代码,它是一个基于 Angular 的网站。
我有,Python 3.6/Selenium/ChromeDriver v-77。
我已经使用了 switch_to 方法直到 iframe with id=f2.2 并取消了在该框架中打开的警报。
然后我尝试了 switch_to.parent_frame() 和 switch_to.default_content()。
但是都returnNone。
<html>
<head>
</head>
<body>
<iframe id="f1"><iframe> // 1
<iframe id="f2"> // 2
<iframe id="f2.1"> // 2.1
<iframe id="f2.2"> // 2.2
<a href='http://link.com'>
// on click alert, dismiss
</iframe>
<div id='ac'></div>
</iframe>
</iframe>
</body
</html>
我要:
第一步:进入iframe [id='f2.2'] // 我达到了
第 2 步:从 iframe [id='f2.2'] 获取数据并在单击该框架中存在的按钮后关闭警报(ajax 请求)
当我 dismiss/accept 警报时,Dom 内容在 iframe [id='f2.1', id='f2.2']
中更新
第 3 步:我想从 div[id='ac']
获取更新的数据
我使用了等待,但无法获取数据。我也试过保存 window_handles[0] 方法的响应,并在警报操作后使用,但它也没有用。
有多种帧切换方式
按索引切换到框架:
driver.switchTo().frame(0);
driver.switchTo().frame(1);
按名称或 ID 切换到框架:
driver.switchTo().frame("iframe1");
driver.switchTo().frame("id of the element");
请尝试解决方案:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")).findElement(By.id("f2.2")));
wait = WebDriverWait(driver, 10)
driver.find_element_by_link_text("http://link.com'").click()
alert = driver.switch_to.alert
alert_text = alert.text
alert.dismiss()
driver.switch_to.default_content()
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")));
String text=driver.findElement(By.id("ac")).getText();
System.out.println(text);
driver.switch_to.default_content()
finally:
driver.quit()
我有以下代码,它是一个基于 Angular 的网站。
我有,Python 3.6/Selenium/ChromeDriver v-77。 我已经使用了 switch_to 方法直到 iframe with id=f2.2 并取消了在该框架中打开的警报。 然后我尝试了 switch_to.parent_frame() 和 switch_to.default_content()。 但是都returnNone。
<html>
<head>
</head>
<body>
<iframe id="f1"><iframe> // 1
<iframe id="f2"> // 2
<iframe id="f2.1"> // 2.1
<iframe id="f2.2"> // 2.2
<a href='http://link.com'>
// on click alert, dismiss
</iframe>
<div id='ac'></div>
</iframe>
</iframe>
</body
</html>
我要:
第一步:进入iframe [id='f2.2'] // 我达到了
第 2 步:从 iframe [id='f2.2'] 获取数据并在单击该框架中存在的按钮后关闭警报(ajax 请求)
当我 dismiss/accept 警报时,Dom 内容在 iframe [id='f2.1', id='f2.2']
中更新第 3 步:我想从 div[id='ac']
获取更新的数据我使用了等待,但无法获取数据。我也试过保存 window_handles[0] 方法的响应,并在警报操作后使用,但它也没有用。
有多种帧切换方式
按索引切换到框架:
driver.switchTo().frame(0);
driver.switchTo().frame(1);
按名称或 ID 切换到框架:
driver.switchTo().frame("iframe1");
driver.switchTo().frame("id of the element");
请尝试解决方案:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")).findElement(By.id("f2.2")));
wait = WebDriverWait(driver, 10)
driver.find_element_by_link_text("http://link.com'").click()
alert = driver.switch_to.alert
alert_text = alert.text
alert.dismiss()
driver.switch_to.default_content()
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")));
String text=driver.findElement(By.id("ac")).getText();
System.out.println(text);
driver.switch_to.default_content()
finally:
driver.quit()