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

У меня есть несколько вложенных фреймов, и мне нужно получить доступ к элементам под ними. Поскольку эти фреймы являются динамическими, я не могу получить доступ к этим элементам.

Могу ли я получить доступ к элементам без использования driver.switchTo().frame()?

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


person user3437379    schedule 24.11.2017    source источник
comment
Используйте xpath, чтобы найти iframe с помощью метода findelement и передать элемент методу switchto. Также вы можете использовать индекс для переключения на iframe.   -  person Grasshopper    schedule 24.11.2017


Ответы (2)


Простыми словами,

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

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

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

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

    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")));
    
  • Переключиться на идентификатор кадра:

    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")));
    
person DebanjanB    schedule 24.11.2017

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

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

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

(or)

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

(or)

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

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

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

driver.switchTo.frame(i);

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

person Dora    schedule 24.11.2017