簡體   English   中英

如何使用 Webdriver 和 C# 通過 Selenium 定位並單擊嵌套在多個框架和框架集中的元素

[英]How to locate and click on an element which is nested within multiple frame and frameset through Selenium using Webdriver and C#

我有如下所示的 html 頁面,我需要在類 clslogin 中單擊登錄。

我如何遍歷以找到登錄名。 我將 C# 與 selenium Webdriver 一起使用。

使用 XPath (/html/body/div/table/tbody/tr[1]/td[3]/a) 我無法控制 Login 類,總是拋出 element not found 錯誤。 任何人都可以幫助我獲得確切的 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以單擊帶有文本的元素作為登錄,您必須誘導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>的存在,並且可以安全地忽略這些標簽。

您需要先更改為正確的 iframe 才能訪問 iframe 下方的路徑。 為此,您可以使用driver.SwichtTo().Frame("your frame ID") 如果此解決方案不起作用,則在此線程中可能是該線程使用相同代碼行但它搜索父節點和子節點的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM