[英]How to switch between frames in Selenium WebDriver using Java
我正在使用Java與WebDriver.I必須在兩幀之間切換。 我已經在selenium IDE中記錄了測試用例,並且我得到的值為selectFrame relative = top select Frame = middle Frame
但是有一個問題是它無法識別relative = top和middleFrame。 如何使用Java在Selenium WebDriver中解決此問題?
WebDriver的driver.switchTo().frame()
方法接受三個可能的參數之一:
按其(從零開始)索引選擇一個幀。 也就是說,如果頁面具有三個幀,則第一幀將位於索引
0
,第二幀位於索引1
,第三幀位於索引2
。 選擇框架后,WebDriver界面上的所有后續調用都將進入該框架。
按名稱或ID選擇框架。 通過匹配名稱屬性定位的幀始終優先於ID匹配的幀。
使用先前定位的WebElement選擇框架。
通過它的id / name獲取幀或通過driver.findElement()
找到它,你會很好。
切換到一個框架:
driver.switchTo.frame("Frame_ID");
再次切換到默認值。
driver.switchTo().defaultContent();
首先,您必須找到幀ID並在WebElement
定義它
例如: - WebElement fr = driver.findElementById("id");
然后使用以下代碼切換到幀: - driver.switchTo().frame("Frame_ID");
示例腳本: -
WebElement fr = driver.findElementById("theIframe");
driver.switchTo().frame(fr);
Then to move out of frame use:- driver.switchTo().defaultContent();
這段代碼很時髦,所以很可能你需要做一些返工。 第一個參數是一個網址,第二個是限制嘗試的計數器。
public boolean selectWindow(window, maxTries) {
def handles
int tries = 0
while (true) {
try {
handles = driver.getWindowHandles().toArray()
for (int a = handles.size() - 1; a >= 0 ; a--) { // Backwards is faster with FF since it requires two windows
try {
Log.logger.info("Attempting to select window: " + window)
driver.switchTo().window(handles[a]);
if (driver.getCurrentUrl().equals(window))
return true;
else {
Thread.sleep(2000)
tries++
}
if (tries > maxTries) {
Log.logger.warn("Cannot select page")
return false
}
} catch (Exception ex) {
Thread.sleep(2000)
tries++
}
}
} catch (Exception ex2) {
Thread.sleep(2000)
tries++
}
}
return false;
}
需要確保一旦切換到一個幀,需要切換回默認內容以訪問另一幀中的webelements。 因為Webdriver傾向於在當前幀內找到新幀。
driver.switchTo().defaultContent()
您還可以使用:
driver.switch_to.frame(0)
(0)
是html上的第一個iframe。
切換回默認內容:
driver.switch_to.default_content()
也可以將WebDriverWait與ExpectedConditions一起使用(以確保Frame可用)。
使用字符串作為參數
(new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name"));
使用定位器作為參數
(new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame-id")));
更多信息可以在這里找到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.