2016-05-25 2 views
0

Моя проблема: у меня есть 3 определенных iFrames на странице, над которой я пытаюсь работать. Все они названы следующие:Выберите конкретную iFrame, имеющую несколько экземпляров с тем же именем

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/40xxxx bgColor=ffffff" frameborder="0"></iframe> 

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/37xxxx bgColor=ffffff" frameborder="0"></iframe> 

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/46xxxx bgColor=ffffff" frameborder="0"></iframe> 

Я попытался driver.switchTo.frame команду, но он видит только индекс 0, который я предполагаю, это первый кадр, перечисленные здесь. Если я выберу этот первый кадр, я не получу ошибку во время выполнения, однако я все еще не вижу никаких элементов внутри фрейма. Я получаю вопрос «не могу найти элемент». Я даже не могу выбрать 2-й или 3-й кадр с помощью switchTo либо с помощью сделанного I, либо с индексом 1 или 2.

Я также попытался составить список с участием всех тэгов iframe. Я получаю только 1 результат. Опять же, я вижу здесь 3. И снова, даже когда я выбираю первый, я все еще не вижу никаких элементов внутри кадра, используя обычные средства.

Что мне здесь не хватает?

Также обратите внимание, что я поставил X для пути из соображений конфиденциальности.

Вот захват того, что произойдет, если я выбираю другой индекс отличного от 0:

org.openqa.selenium.NoSuchFrameException: Unable to locate frame: 1 
Command duration or timeout: 62 milliseconds 
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33' 
System info: host: 'DESKTOP-1PV0EPA', ip: '192.168.0.11', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_77' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=46.0.1, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 

ответ

0

Вы можете использовать XPATH локатор и идентифицировать кадр частичной src ссылки:

void switchToIframe(int catalogId) 
{ 
    driver.switchTo().defaultContent(); // don't get trapped in iframes 
    driver.switchTo().frame(
     driver.findElement(
      By.xpath("//iframe[contains(@src, 'catalog/" + catalogId + "')]")); 
} 

использовать например:

switchToIframe(40); // frame 1 
switchToIframe(36); // frame 2 
switchToIframe(46); // frame 3 

Вам также может потребоваться дождаться загрузки кадров до переключения на em

+0

Хорошо, я дал это попробовать, и я не получаю такого исключения элементов. –

0

Я бы предложил попытаться разрешить iframes как WebElements их XPaths. Фрагмент кода ниже заглушек из тестового примера, вам нужно определить xpaths для каждого из ваших iframes и заполнить строки, но я думаю, что это должно быть близко.

private static final By FRAME_PATH_1 = By.xpath(""); 
    private static final By FRAME_PATH_2 = By.xpath(""); 
    private static final By FRAME_PATH_3 = By.xpath(""); 

    private void traverseFrames(WebDriver driver) { 
     WebDriverWait wait = new WebDriverWait(driver, 10); 

     WebElement frame1 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_1)); 
     WebElement frame2 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_2)); 
     WebElement frame3 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_3)); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame1)); 
     System.out.println("in Frame 1"); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame2)); 
     System.out.println("in Frame 2"); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame3)); 
     System.out.println("in Frame 3"); 

    } 

XPaths не велики для ремонтопригодности, если вы ожидаете, что содержимое страницы изменится, но он может получить вас ближе к тому, что вы ищете. Я использую расширение Firepath для Firebug, чтобы помочь решить xpaths.

Best of Luck

Смежные вопросы