Невозможно использовать элементы в iframe после переключения - PullRequest
0 голосов
/ 05 ноября 2018

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

WebDriver driver = DriverFactory.getWebDriver()
WebDriverWait wait = new WebDriverWait(driver, 15)
driver.switchTo().defaultContent()
WebElement iframe = driver.findElement(By.cssSelector(".b-iframe__iframe"))
driver.switchTo().frame(iframe)
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(
 'fieldset.radio-switch-group')))

Снимок экрана HTML ниже изображения HTML

1 Ответ

0 голосов
/ 05 ноября 2018

В соответствии с HTML , которым вы поделились, чтобы найти нужный WebElement , вам необходимо:

  • Индуцируйте WebDriverWait , чтобы нужный кадр был доступен, и переключитесь на него.
  • Индуцируйте WebDriverWait , чтобы требуемый элемент был видимым , и вы можете использовать любое из следующих решений:

    • Использование cssSelector:

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.b-iframe__iframe[src*='securetest']")));
      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("fieldset.radio-switch-group#balance-type")));
      
    • Использование xpath:

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='b-iframe__iframe' and contains(@src,'securetest')]")));
      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//fieldset[@class='radio-switch-group' and @id='balance-type']")));
      

Здесь вы можете найти соответствующее обсуждение по Способы работы с #document в iframe

...