Подтвердить что ты не робот

Как определить и переключиться на кадр в веб-селене, когда кадр не имеет идентификатора

Может ли кто-нибудь сказать мне, как я могу идентифицировать и переключиться на 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")));
4b9b3361

Ответ 1

вы можете использовать cssSelector,

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));

Ответ 2

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']")));

Ответ 3

Вы также можете использовать 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']")));

Ответ 4

Перед переключением в кадр убедитесь, что вы переключились на содержимое по умолчанию:

driver.switchTo().defaultContent();
driver.switchTo().frame(x);

x может быть номером фрейма, или вы можете сделать driver.findlement и использовать любой из доступных вам вариантов, например: driver.findElementByName("Name").

Ответ 6

1) goto html view

2) введите iframe и найдите нужный кадр и подсчитайте значение и переключитесь на него с помощью

oASelFW.driver.switchTo().frame(2); 

если это первый кадр, используйте oASelFW.driver.switchTo().frame(0);

если это второй кадр, используйте oASelFW.driver.switchTo().frame(1); соответственно

Ответ 7

Самый простой способ сделать это - вот так. Если его кадр можно щелкнуть правой кнопкой мыши по полю, и если вы видите выбор "открыть рамку на вкладке", сделайте это.

Затем возьмите URL-адрес фрейма, и это то, что вы положили в свой Python script, используя "driver.get( http://blah бла..)

Затем Selenium может найти ваш именованный элемент. Это помогло мне потратить много времени на то, чтобы попробовать все предложения, которые узнавали, но не работали. Проблема с моей была в кадре.

Я использую Linux, который дает мне возможность щелкнуть правой кнопкой мыши по открытию фрейма самостоятельно на другой вкладке. Я не использую Windows, поэтому не знаю, получишь ли вы эту опцию в контекстном меню.

Ganzarola