Можно ли переключиться на элемент во фрейме без использования driver.switchTo(). Frame("frameName") в Selenium Webdriver Java?

У меня есть несколько вложенных фреймов, и мне нужно получить доступ к элементам под ними. Поскольку эти кадры являются динамическими, я не могу получить доступ к этим элементам. Могу ли я получить доступ к элементам без использования driver.switchTo(). Frame()

Как использовать xpath напрямую или jquery, javascript или что-то еще? Любые предложения приветствуются

2 ответа

Проще говоря,

Нет, было бы невозможно получить доступ к элементам, не переключившись на намеченный <iframe> т.е. без использования driver.switchTo().frame()

Чтобы переключиться на нужный кадр, вы должны использовать одно из следующих:

  • Переключиться через имя кадра:

    driver.switchTo().frame("frame_name");
    
  • Переключить через Frame ID:

    driver.switchTo().frame("frame_id");
    
  • Переключить через индекс кадра:

    driver.switchTo().frame(1);
    
  • Переключиться через WebElement:

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
  • Переключиться на родительский кадр:

    driver.switchTo().parentFrame();
    
  • Переключиться на содержимое по умолчанию:

    driver.switchTo().defaultContent();
    

Но в соответствии с передовой практикой вы всегда должны вызывать WebDriverWait для желаемого доступного фрейма и переключаться на него следующим образом:

  • Переключиться через имя кадра:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
  • Переключить через Frame ID:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
  • Переключение через Frame cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
  • Переключить через Frame xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    

Я не думаю, что вы можете переключиться на фрейм, не используя driver.switchTo.frame(), когда у вас есть несколько фреймов.

Но вы можете использовать xpath, как показано ниже, с идентификатором содержит для динамических фреймов:

"//iframe[contains(@id,'frame')]"

(или же)

Вы можете попробовать использовать атрибут src фрейма в вашем xpath.

(или же)

Вы можете найти количество фреймов или фреймов, используя ниже xpath, если ваша позиция фрейма такая же:

int noofframes=driver.findelements(By.tagName(“iframe”)).size();

И с помощью индекса вы можете переключиться на определенный кадр, а затем вы можете попытаться найти элементы в кадре.

driver.switchTo.frame(i);

Надеюсь это поможет.

Другие вопросы по тегам