问题
I have html page like below and I need to click on Login inside the class clslogin.
How do I traverse to find the Login. I'm using C# with selenium Webdriver.
With XPath (/html/body/div/table/tbody/tr[1]/td[3]/a) I'm not getting control on Login class, always element not found error is throwing. Can anybody help me to get exact 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>
回答1:
As per the HTML you have shared to click on the element with text as Login you have to induce WebDriverwait twice to switch through 2 child frame
and then again to locate the desired element as follows:
//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();
Note: You don't have to consider the presence of <frameset>
and can safely ignore those tags.
回答2:
You need to first change to the correct iframe to access the path who are below the iframe. For that you can use driver.SwichtTo().Frame("your frame ID")
. If this solution does not work, in this thread may be a solution the thread uses the same lines of code but it search for the parent and child nodes
来源:https://stackoverflow.com/questions/50798937/how-to-locate-and-click-on-an-element-which-is-nested-within-multiple-frame-and