我有如下所示的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>
根据您共享的 HTML ,单击带有文本作为 Login 的元素,您必须诱使 WebDriverwait 两次切换2个子frame元素,然后再次定位所需的元素,如下所示:
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>并且可以安全地忽略这些标签。
<frameset>