一尘不染

如何使用Webdriver和C#通过Selenium找到并单击嵌套在多个框架和框架集中的元素

selenium

我有如下所示的html页面,我需要在类clslogin中单击Login。

我如何遍历以查找登录名。我正在将C#与Selenium Webdriver一起使用。

使用XPath(/ html / body / div / table / tbody / tr [1] / td [3] /
a)时,我无法控制Login类,始终找不到元素抛出错误。谁能帮助我获得确切的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>

阅读 339

收藏
2020-06-26

共1个答案

一尘不染

根据您共享的 HTML ,单击带有文本作为 Login 的元素,您必须诱使 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>并且可以安全地忽略这些标签。

2020-06-26