Как найти и щелкнуть элемент, вложенный в несколько фреймов и набор фреймов через Selenium, используя Webdriver и C # - PullRequest
0 голосов
/ 11 июня 2018

У меня есть html-страница, как показано ниже, и мне нужно нажать на Login внутри класса clslogin.

Как мне пройти, чтобы найти Login.Я использую C # с селеном Webdriver.

С XPath (/ html / body / div / table / tbody / tr [1] / td [3] / a) Я не получаю контроль над классом входа в систему, всегда элемент не найден, ошибка выбрасывает.Кто-нибудь может помочь мне получить точный xpath.

<html>
 <head></head>
 <frameset name="mytestTopFrame" rows="*"......  >
  <frame name="mytestTopsubframe" src="index.html" width="100%"......... >
   <html>
    <head></head>
     <frameset name="mytest" rows="70,20..."......  >
       <frame name="mytestsubframe" src="menu.html" width="100%"......... >
       <html>
        <body class="clsmenu" .......>
         <div align="left">
           <table id="Title" ......>
            <tbody>
             <tr class="toptitle" ...>
              <td class="clicklogin" ....>
               <a class="clslogin" href="linkref">Login </a>
              </td>
             </tr>
            </tbody>
          </table>
         </div>
        </body>
       </html>
      </frame>
    </frameset>
   </html>
  </frame>
 </frameset>
</html>

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Согласно HTML , который вы указали, чтобы щелкнуть по элементу с текстом Логин , вы должны дважды WebDriverwait переключиться на 2 дочерних frame и затем снова, чтобы найти нужный элемент следующим образом:

//SwitchTo mytestTopsubframe
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.Name("mytestTopsubframe")));
//SwitchTo mytestsubframe
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.Name("mytestsubframe")));
//Locate the desired element
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[@class='clslogin' and @href='linkref']"))).Click();

Примечание : вам не нужно учитывать наличие <frameset> и вы можете спокойно игнорировать эти теги.

0 голосов
/ 11 июня 2018

Сначала необходимо перейти на правильный iframe, чтобы получить доступ к пути, который находится ниже iframe.Для этого вы можете использовать driver.SwichtTo().Frame("your frame ID").Если это решение не работает, в этом потоке может быть решение поток использует те же строки кода, но ищет родительский и дочерний узлы

...