Ответ 1
вы можете использовать cssSelector,
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
Может ли кто-нибудь сказать мне, как я могу идентифицировать и переключиться на iframe, который имеет только заголовок?
<iframe frameborder="0" style="border: 0px none; width: 100%; height: 356px; min-width: 0px; min-height: 0px; overflow: auto;" dojoattachpoint="frame" title="Fill Quote" src="https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none">
Я пробовал код ниже, но он не работает
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
вы можете использовать cssSelector,
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
driver.switchTo().frame()
имеет несколько перегрузок.
driver.switchTo().frame(name_or_id)
Здесь ваш iframe
не имеет идентификатора или имени, поэтому не для вас.
driver.switchTo().frame(index)
Это последний вариант выбора, потому что использование индекса недостаточно стабильно, как вы могли себе представить. Если это ваш единственный iframe на странице, попробуйте driver.switchTo().frame(0)
driver.switchTo().frame(iframe_element)
Самый распространенный. Вы определяете свой iframe как другие элементы, а затем передаете его в метод.
Здесь расположение атрибутов title
представляется лучшим.
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
// driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@title='Fill Quote']")));
Вы также можете использовать src для переключения на фрейм, вот что вы можете использовать:
driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@src='https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none']")));
Перед переключением в кадр убедитесь, что вы переключились на содержимое по умолчанию:
driver.switchTo().defaultContent();
driver.switchTo().frame(x);
x
может быть номером фрейма, или вы можете сделать driver.findlement
и использовать любой из доступных вам вариантов, например: driver.findElementByName("Name")
.
Вы можете использовать Css Selector или Xpath:
Подход 1: Селектор CSS
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
Подход 2: Xpath
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@title='Fill Quote']")));
1) goto html view
2) введите iframe и найдите нужный кадр и подсчитайте значение и переключитесь на него с помощью
oASelFW.driver.switchTo().frame(2);
если это первый кадр, используйте oASelFW.driver.switchTo().frame(0);
если это второй кадр, используйте oASelFW.driver.switchTo().frame(1);
соответственно
Самый простой способ сделать это - вот так. Если его кадр можно щелкнуть правой кнопкой мыши по полю, и если вы видите выбор "открыть рамку на вкладке", сделайте это.
Затем возьмите URL-адрес фрейма, и это то, что вы положили в свой Python script, используя "driver.get( http://blah бла..)
Затем Selenium может найти ваш именованный элемент. Это помогло мне потратить много времени на то, чтобы попробовать все предложения, которые узнавали, но не работали. Проблема с моей была в кадре.
Я использую Linux, который дает мне возможность щелкнуть правой кнопкой мыши по открытию фрейма самостоятельно на другой вкладке. Я не использую Windows, поэтому не знаю, получишь ли вы эту опцию в контекстном меню.
Ganzarola