Selenium не может идентифицировать элементы чванства в пределах iframe - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть некоторый код веб-драйвера для селена, который не может идентифицировать какие-либо веб-элементы между строками 23 и 81. Однако я могу идентифицировать и взаимодействовать со всеми веб-элементами выше строки 23 и ниже 81.

19 ….
20 <div id="main" class="well content" ui-view="content">
21     <iframe src="swagger-ui/index.html" frameborder="0" marginheight="0" marginwidth="0"  
22      width="100%" height="900" scrolling="auto" target="_top" title="Swagger UI">
23           #document
24                <!doctype html>
25           <html>
26           <head>…</head>
27           <body class= “swagger-section” marginWidth= “0” marginheight= “0”>
                      <div class = “swagger-ui-wrap”>
                           <a id =”logo” href=http://swagger.io>swagger</a>
                                 …
                      </div>
80            </body>
81     </iframe>
82 </div>
83  ….

Я добавил следующую зависимость maven к своему POM:

<!-- https://mvnrepository.com/artifact/io.swagger/swagger-core -->
<dependency>
   <groupId>io.swagger</groupId>
   <artifactId>swagger-core</artifactId>
   <version>1.5.21</version>
</dependency>

Может ли кто-нибудь сообщить мне, если есть дополнительные зависимости, которые мне нужно включить в POM, или дать некоторое представление о том, почему size = 0 в приведенном ниже утверждении?

size = driver.findElements(By.xpath("//*[@id='swagger-ui-container']")).size();

1 Ответ

0 голосов
/ 09 февраля 2019

SeleniumWebDriver не может определить любые веб-элементы между строками 23 и 81, так как эти строки:

21     <iframe src="swagger-ui/index.html" frameborder="0" marginheight="0" marginwidth="0"  
22      width="100%" height="900" scrolling="auto" target="_top" title="Swagger UI">
23           #document
24                <!doctype html>
25           <html>
26           <head>…</head>
27           <body class= “swagger-section” marginWidth= “0” marginheight= “0”>
              <div class = “swagger-ui-wrap”>
               <a id =”logo” href=http://swagger.io>swagger</a>
                 …
              </div>
80            </body>
81     </iframe>

находятся в пределах <iframe>.


Чтобы идентифицировать и взаимодействовать со всеми WebElements в теге <iframe>, вам необходимо:

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

    • cssSelector :

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[title='Swagger UI'][src='swagger-ui/index.html']")));
      my_size = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#swagger-ui-container"))).size();
      
    • xpath :

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@title='Swagger UI' and @src='swagger-ui/index.html']")));
      my_size = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id='swagger-ui-container']"))).size();
      

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

...