Как я могу нажать кнопку внутри фрейма с селеновым веб-драйвером в VBA? - PullRequest
0 голосов
/ 30 января 2019

Я сделал автоматизацию для веб-страницы с фреймами, и мне нужно щелкнуть несколько ссылок меню, прежде чем вернуться к основному контенту, чтобы выполнить задачи.Эта автоматизация запускается из Access-VBA.Вот фрагмент HTML, который показывает фрейм:

<frameset id="topFrameset"> 
  <frameset id="BodyFrameset" cols="0,177,*">
    <frame name="ButtonsFrame" id="ButtonsFrame" target="main" scrolling="NO" noresize="" src="MyMenu.action">
      #document
      <html>
      <body>
        <input type="hidden" name="listParentsId" value="[501, 502, 503]" id="listParentsId">
        <div id="menu_container">
          <div id="menu_1" onmouseover="MENU.ToolTipsCreate('501')">
            <a onclick="MENU.showItems('501', '')">My Account</a>
            <img id="img_501" src="/common/images/dropdown2_arrow.png" onclick="MENU.showItems('501', '')">
          </div>
        </div>		
      </body></html>
    </frame>
  </frameset>
</frameset>

Я использую привязки SeleniumBasic v2.0.9.0 для VBA.См. Автоматизация браузера в Excel VBA с использованием Selenium для установки и обучения.

Я пробовал webdriver.SwitchToFrame, среди многих других тестов, все они не прошли.

Dim driver As selenium.WebDriver
Set driver = New ChromeDriver
driver.Get (URL)

'Here goes the part of the code that logs in the page, it's irrelevant for this analysis...

driver.SwitchToFrame ("topFrameset") 'This line returns Error N°: 8 - NoSuchFrameError. Frame not be found. Identifier:topFrameset

Надеюсь, что кто-нибудь поможет мне щелкнуть ссылку или элемент img внутри "menu_1".Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Поработав с этим, я сам нашел решение.Я установил приложение «SideeX», доступное в Google Store.Затем я записал действия, которые мне нужно было подражать Selenium.Затем я заметил, что кадры, имена которых я описал в исходном вопросе (topFrameset, BodyFrameset, ButtonsFrame), были записаны SideeX через их индексы.Так что я просто должен был выполнить те же действия с Selenium.В моем случае, например, у меня была следующая последовательность действий:

driver.SwitchToFrame 0
driver.SwitchToFrame 1
driver.FindElementById("img_501").Click
driver.SwitchToParentFrame
driver.SwitchToFrame 2

Это только мой случай, но важная вещь, которая может быть полезна для других с той же проблемой, это знать, что вы можетеиспользуйте SideeX, чтобы найти индексы элементов или последовательность действий, необходимых для достижения вашей цели.

0 голосов
/ 31 января 2019

В 'ПРИМЕР ТЕСТА 2', можете ли вы прокомментировать эту строку driver.SwitchToDefaultContent и попробовать?Почему вы переключаетесь на defaultcontent перед переключением на фрейм?

defaultContent -> Перейти на страницу по умолчанию

Попробуйте и другие варианты: (В JAVA мы делаем.)

switchTo().frame(int) – Switch to a frame with its index switchTo().frame(“name of the frame”) – Switch to a frame with its name switchTo().frame (WebElement) – Switch to a frame with its web element location

...