目錄
顯示等待(Explicit Wait)
什么是顯示等待?
如何實現(xiàn)顯示等待?
顯示等待條件
隱式等待(Implicit Wait)
什么是隱式等待?
如何實現(xiàn)隱式等待?
顯示等待和隱式等待的區(qū)別
強制等待
在Selenium自動化測試中,等待是一個至關(guān)重要的概念。網(wǎng)頁加載速度、元素的可見性以及元素的可交互性都是測試腳本成功執(zhí)行的關(guān)鍵因素。Selenium提供了兩種主要的等待方式,即"顯示等待"和"隱式等待",用于處理這些情況。本文將深入探討這兩種等待方式的使用場景和實現(xiàn)方式,并結(jié)合Selenium 3和JUnit 5來說明。
顯示等待(Explicit Wait)
什么是顯示等待?
顯示等待是一種在特定條件下等待某個元素出現(xiàn)或某個條件變?yōu)檎娴牡却绞?。這意味著你可以設(shè)置一個等待時間,只有在這個時間內(nèi)特定條件滿足時,測試腳本才會繼續(xù)執(zhí)行。這樣可以確保在元素加載完成或者某個條件成立之后再進行后續(xù)的操作,從而提高測試的穩(wěn)定性和可靠性。
如何實現(xiàn)顯示等待?
在Selenium 3和JUnit 5中,我們可以使用WebDriverWait
類來實現(xiàn)顯示等待,如以下示例:
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ExplicitWaitExample {
@Test
public void explicitWaitExample() {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
// 打開網(wǎng)頁
driver.get("https://example.com");
// 創(chuàng)建一個等待對象,設(shè)置等待時間為10秒
WebDriverWait wait = new WebDriverWait(driver, 10);
// 等待直到按鈕可點擊
WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("http://button[text()='Click Me']")));
// 點擊按鈕
button.click();
// 關(guān)閉瀏覽器
driver.quit();
}
}
上述代碼中,我們首先設(shè)置了Chrome瀏覽器的驅(qū)動路徑,并創(chuàng)建了一個WebDriver
實例。然后,我們打開了網(wǎng)頁,并使用WebDriverWait
類來創(chuàng)建一個顯示等待對象,并指定了最大等待時間為10秒。接下來,我們使用ExpectedConditions.elementToBeClickable
條件來等待按鈕出現(xiàn)并可點擊。一旦按鈕符合條件,就會執(zhí)行后續(xù)的點擊操作。
顯示等待條件
1.?elementToBeClickable
: 等待元素可點擊,適用于需要點擊某個元素的操作。
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("elementId")));
?2.?visibilityOfElementLocated
: 等待元素可見,適用于需要驗證元素是否出現(xiàn)在頁面上的操作。
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("http://div[@class='example']")));
?3.?textToBePresentInElement
: 等待文本出現(xiàn)在元素中,適用于需要驗證元素是否包含特定文本的操作。
boolean textPresent = wait.until(ExpectedConditions.textToBePresentInElement(By.id("elementId"), "Expected Text"));
?4.?presenceOfElementLocated
: 等待元素存在,不關(guān)心元素是否可見或可點擊,只要元素在DOM中存在即可。
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("elementId")));
5.?frameToBeAvailableAndSwitchToIt
: 等待幀可用并切換到它,適用于需要在iframe中執(zhí)行操作的情況。
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frameId")));
?6.?alertIsPresent
: 等待警告框出現(xiàn),適用于需要處理JavaScript警告框的情況。
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
這些等待條件使你能夠根據(jù)需要等待元素的各種狀態(tài),以確保你的自動化測試腳本在執(zhí)行操作之前等待正確的條件。根據(jù)具體的測試場景和需求,你可以選擇適當?shù)牡却龡l件來提高測試的穩(wěn)定性和可靠性。
隱式等待(Implicit Wait)
什么是隱式等待?
隱式等待是一種全局性的等待設(shè)置,它會在整個測試腳本的執(zhí)行過程中生效。當你啟用隱式等待后,Selenium會在查找元素時等待一段時間,如果元素在這個時間內(nèi)找到了,就會立即執(zhí)行后續(xù)操作,否則會拋出超時異常。這個等待時間是全局的,適用于所有的元素查找操作。
如何實現(xiàn)隱式等待?
在Selenium 3和JUnit 5中,你可以使用implicitlyWait
方法來啟用隱式等待。以下是一個示例:
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ImplicitWaitExample {
@Test
public void implicitWaitExample() {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
// 設(shè)置全局的隱式等待時間為10秒
driver.manage().timeouts().implicitlyWait(10, java.util.concurrent.TimeUnit.SECONDS);
// 打開網(wǎng)頁
driver.get("https://example.com");
// 查找元素,如果元素不在頁面上立即找到,最多等待10秒
WebElement element = driver.findElement(By.xpath("http://input[@name='search']"));
// 執(zhí)行其他操作
element.sendKeys("Selenium");
// 關(guān)閉瀏覽器
driver.quit();
}
}
在上述代碼中,我們首先設(shè)置了Chrome瀏覽器的驅(qū)動路徑,并創(chuàng)建了一個WebDriver
實例。然后,我們使用driver.manage().timeouts().implicitlyWait
方法來設(shè)置全局的隱式等待時間為10秒。這意味著每次查找元素時,Selenium會等待最多10秒,如果元素在這個時間內(nèi)找到了,就會繼續(xù)
執(zhí)行后續(xù)操作。
顯示等待和隱式等待的區(qū)別
1. 用法和范圍:
-
隱式等待: 隱式等待是一種全局性的等待設(shè)置,適用于整個WebDriver實例的生命周期。一旦設(shè)置了隱式等待,它將在所有的元素查找操作上生效,除非被顯式地覆蓋或禁用。它不依賴于特定條件或元素,而只是設(shè)置了一個全局的最大等待時間,當查找元素時,如果元素沒有立即找到,WebDriver會等待指定的時間。
-
顯示等待: 顯示等待是一種更靈活的等待機制,它允許你根據(jù)特定的條件等待元素或條件滿足后再執(zhí)行后續(xù)操作。顯示等待需要明確地定義等待條件和等待時間,并且僅在等待條件滿足或超時后才繼續(xù)執(zhí)行操作。顯示等待是針對特定的元素或條件,可以根據(jù)需要在不同的地方使用不同的等待條件和時間。
2. 超時處理:
-
隱式等待: 隱式等待設(shè)置一個全局的超時時間,如果在該時間內(nèi)找到了元素,就會立即執(zhí)行后續(xù)操作。如果超過了超時時間而元素還未找到,WebDriver會拋出
NoSuchElementException
異常。 -
顯示等待: 顯示等待允許你為每個等待條件設(shè)置不同的超時時間。這意味著你可以根據(jù)不同的情況和需求設(shè)置不同的等待時間,以確保測試腳本在特定條件滿足后繼續(xù)執(zhí)行。
3. 等待條件:
-
隱式等待: 隱式等待不依賴于特定的等待條件,它只是等待一段時間,無論元素是否可見、可交互或其他條件。
-
顯示等待: 顯示等待允許你使用預(yù)定義的等待條件(例如
visibilityOfElementLocated
、elementToBeClickable
、textToBePresentInElement
等)或自定義的等待條件,以滿足特定的測試需求。你可以根據(jù)需要選擇適當?shù)臈l件。
綜上所述,顯示等待提供了更大的靈活性和控制,因為它允許你為不同的元素或情況設(shè)置不同的等待條件和超時時間。隱式等待則是一種全局設(shè)置,適用于整個WebDriver實例,對于整體性能有較好的控制,但缺乏靈活性,可能會導(dǎo)致不必要的等待時間或等待時間過短。在實際測試中,通常建議優(yōu)先使用顯示等待,根據(jù)需要進行精確的等待條件配置,以提高測試的穩(wěn)定性和可維護性~~??
強制等待
強制等待是一種等待方式,它不依賴于特定條件或元素的可見性或可點擊性。相反,它是在測試腳本中添加一個明確的等待時間,無論條件是否滿足,都會等待指定的時間。雖然強制等待不是推薦的等待策略,因為它不夠靈活,但在某些情況下仍然有用,例如等待網(wǎng)頁加載或執(zhí)行復(fù)雜的JavaScript操作后。
在Selenium中,我們可以使用Thread.sleep
方法來實現(xiàn)強制等待。這個方法會導(dǎo)致當前線程暫停執(zhí)行指定的時間,單位是毫秒。
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class ExplicitWaitExample {
@Test
public void forceWaitExample() throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
// 打開網(wǎng)頁
driver.get("https://example.com");
// 執(zhí)行一些操作...
// 強制等待5秒鐘
Thread.sleep(5000);
// 執(zhí)行其他操作...
// 關(guān)閉瀏覽器
driver.quit();
}
}
在上述代碼中,我們使用Thread.sleep
方法來強制等待5秒鐘。請注意,這會導(dǎo)致測試腳本暫停執(zhí)行,無論頁面是否已經(jīng)加載完畢或其他條件是否滿足。因此,強制等待可能會導(dǎo)致測試腳本變得不穩(wěn)定,因為它不會等待元素的可見性或可交互性。
總結(jié):
在Selenium自動化測試中,等待是一個至關(guān)重要的概念,用于處理頁面加載、元素可見性和可交互性等情況。兩種主要的等待方式是隱式等待(Implicit Wait)和顯示等待(Explicit Wait),它們在用法和行為上有一些關(guān)鍵區(qū)別。
隱式等待 是一種全局性的等待設(shè)置,它適用于整個WebDriver實例的生命周期。它會設(shè)置一個全局的最大等待時間,當查找元素時,如果元素沒有立即找到,WebDriver會等待指定的時間,然后繼續(xù)執(zhí)行后續(xù)操作。隱式等待不依賴于特定條件或元素,而只是在元素查找時等待一段時間。文章來源:http://www.zghlxwxcb.cn/news/detail-696933.html
顯示等待 是一種更靈活的等待機制,它允許你根據(jù)特定的條件等待元素或條件滿足后再執(zhí)行后續(xù)操作。顯示等待需要明確地定義等待條件和等待時間,并且僅在等待條件滿足或超時后才繼續(xù)執(zhí)行操作。顯示等待是針對特定的元素或條件,可以根據(jù)需要在不同的地方使用不同的等待條件和時間。文章來源地址http://www.zghlxwxcb.cn/news/detail-696933.html
到了這里,關(guān)于Selenium 3和JUnit 5中的顯示等待與隱式等待的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!