一、get 和 navigate().to的区别
get系列方法每一个都是全新的操作,相当于自带了一个默认的刷新页面的功能。
navigate系列的方法是基于浏览器的历史记录在操作。
driver.navigate().to("http://news.baidu.com/")
navigate().refresh() # 刷新
driver.navigate().forward();
driver.navigate().back();
二、显性等待
1、code
from selenium.webdriver.support.uiimport WebDriverWait
def document_initialised(driver):
return driver.execute_script("return initialised")
# driver.navigate("file:///race_condition.html")
WebDriverWait(driver, timeout=3).until(document_initialised)
el = driver.find_element_by_tag_name("p")
assert el.text =="Hello from JavaScript!"
# el = WebDriverWait(driver).until(lambda d: d.find_element_by_tag_name("p"))
# assert el.text == "Hello from JavaScript!"
2、race_condition.html
<!doctype html>
<meta charset=utf-8>
<title>Race Condition Example</title>
<script>
var initialised = false;
window.addEventListener("load", function() {
var newElement = document.createElement("p");
newElement.textContent = "Hello from JavaScript!";
document.body.appendChild(newElement);
initialised = true;
});
</script>
三、隐式等待
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
my_dynamic_element = driver.find_element_by_id("kw")
四、流畅等待
1、定义了等待条件的最大时间量,以及检查条件的频率。
2、WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None)
wait = WebDriverWait(driver, 10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
driver = 浏览器打开实例
timeout = 超时的总时长
poll_frequency = 循环查询的间隔时间,默认是1秒
ignored_exceptions = 忽略异常,默认忽略NoSuchElementException