selenium-webdriver
Переключающие рамки
Поиск…
Синтаксис
- Джава
- driver.switchTo (). frame (String name);
- driver.switchTo (). frame (String id);
- driver.switchTo (). frame (int index);
- frame.switchTo (). frame (элемент WebElement frameElement);
- . Driver.switchTo () defaultContent ();
- C #
- driver.SwitchTo (). Frame (int frameIndex);
- driver.SwitchTo (). Frame (элемент интерфейса IWebElement);
- driver.SwitchTo (). Frame (string frameName);
- . Driver.SwitchTo () DefaultContent ();
- питон
- driver.switch_to_frame (nameOrId)
- driver.switch_to.frame (nameOrId)
- driver.switch_to_frame (индекс)
- driver.switch_to.frame (индекс)
- driver.switch_to_frame (frameElement)
- driver.switch_to.frame (frameElement)
- driver.switch_to_default_content ()
- driver.switch_to.default_content ()
- JavaScript
- driver.switchTo (). рама (nameOrId)
- driver.switchTo (). кадр (индекс)
- driver.switchTo (). defaultContent ()
параметры
параметр | подробности |
---|---|
nameOrId | Выберите фрейм по имени. |
индекс | Выберите кадр по индексу на основе нуля. |
frameElement | Выберите фрейм, используя ранее расположенный WebElement |
Чтобы переключиться на фрейм с помощью Java
Для экземпляра, если исходный HTML-код html-представления или элемента обернут iframe следующим образом:
<iframe src="../images/eightball.gif" name="imgboxName" id="imgboxId">
<p>iframes example</p>
<a href="../images/redball.gif" target="imgbox">Red Ball</a>
</iframe><br />
... затем, чтобы выполнить любое действие на веб-элементах iframe, вам нужно сначала переключить фокус на iframe, используя любой из следующих методов:
Использование идентификатора кадра (должно использоваться только в том случае, если вы знаете идентификатор iframe).
driver.switchTo().frame("imgboxId"); //imgboxId - Id of the frame
Использование имени фрейма (должно использоваться только в том случае, если вы знаете имя iframe).
driver.switchTo().frame("imgboxName"); //imgboxName - Name of the frame
Использование индекса кадра (следует использовать, только если у вас нет идентификатора или имени iframe), где индекс определяет позицию iframe среди всех кадров.
driver.switchTo().frame(0); //0 - Index of the frame
Примечание. Если на странице есть три кадра, то первый кадр будет иметь индекс 0, второй - по индексу 1, а третий - по индексу 2.
Использование ранее расположенного webelement (должно использоваться только в том случае, если вы уже разместили фрейм и вернули его как WebElement
).
driver.switchTo().frame(frameElement); //frameElement - webelement that is the frame
Итак, нажмите на якорь Red Ball
:
driver.switchTo().frame("imgboxId");
driver.findElement(By.linkText("Red Ball")).Click();
Чтобы выйти из фрейма с помощью Java
Чтобы переключить фокус на основной или первый кадр страницы. Вы должны использовать синтаксис ниже.
driver.switchTo().defaultContent();
Переключитесь на фрейм с помощью C #
1. Переключитесь на кадр по индексу.
Здесь мы переходим к индексу 1. Индекс относится к порядку кадров на странице. Это должно использоваться как последнее средство, поскольку идентификатор кадра или имена намного надежнее.
driver.SwitchTo().Frame(1);
2. Переключитесь на кадр по имени
driver.SwitchTo().Frame("Name_Of_Frame");
3. Переключитесь на кадр по заголовку, идентификатору или другим, передав IWebElement
Если вы хотите переключиться на фрейм по идентификатору или названию, вам необходимо передать в качестве элемента веб-элемент:
driver.SwitchTo().Frame(driver.FindElement(By.Id("ID_OF_FRAME")));
driver.SwitchTo().Frame(driver.FindElement(By.CssSelector("iframe[title='Title_of_Frame']")));
Также обратите внимание, что если ваш фрейм занимает несколько секунд, вы можете использовать ожидание :
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible(By.Id("Id_Of_Frame")));
Выйдите из рамки:
driver.SwitchTo().DefaultContent()
Чтобы выйти из рамки с помощью C #
Чтобы переключить фокус на основной или первый кадр страницы. Вы должны использовать синтаксис ниже.
. WebDriver.SwitchTo () DefaultContent ();
Переключение между дочерними рамками родительской рамки.
У вас есть родительская рамка (Frame-Parent). и 2 дочерних кадра (Frame_Son, Frame_Daughter). Давайте посмотрим на различные условия и способы их обработки.
1. От родителя к сыну или дочери:
driver.switchTo().frame("Frame_Son");
driver.switchTo().frame("Frame_Daughter");
2. От сыня к родительскому: если родительский фрейм по умолчанию, переключитесь на кадр по умолчанию, иначе от переключателя фрейма по умолчанию до родительского фрейма. Но вы не можете напрямую переключиться с сына на родителя.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
3. От сына дочери: если твоя сестра совершит какую-то ошибку, не кричите на нее, просто протяните руку своему родителю. Аналогично, вы даете управление родительскому кадру, а затем дочернему кадру.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
driver.switchTo().frame("Frame_Daughter");
Подождите, пока ваши кадры загрузятся
В некоторых случаях ваш фрейм может не отображаться сразу, и вам, вероятно, придется подождать, пока он будет загружен для переключения. Или у вас будет NoSuchFrameException.
Поэтому всегда нужно выбирать, прежде чем переключаться. Следующим является идеальный способ подождать, пока загрузится фрейм.
try{
new WebDriverWait(driver, 300).ignoring(StaleElementReferenceException.class).
ignoring(WebDriverException.class).
until(ExpectedConditions.visibilityOf((driver.findElement(By.id("cpmInteractionDivFrame"))));}
catch{
// выдает исключение только в том случае, если ваш фрейм не отображается с вашим временем ожидания 300 секунд}