c#-4.0 - 无法按名称和 XPath 在 Selenium WebDriver 中找到元素

标签 c#-4.0 xpath selenium automated-tests selenium-webdriver

我正在使用 Selenium WebDriver 并编写了一段小代码来查找元素(即按钮)并单击它。 以下是该按钮的 HTML 代码:

<input type="submit" name="j_id0:j_id2:j_id3:j_id4:j_id7" value="New Master Health Program" onclick="AddLink()" class="btn">

以下是测试用例的 C# 代码:

IWebElement newMasterHealthProgramsLink = driver.FindElement(By.Name("j_id0:j_id2:j_id3:j_id4:j_id7"));
newMasterHealthProgramsLink.Click();

我也尝试使用 XPath:

IWebElement newMasterHealthProgramsLink = driver.FindElement(By.XPath("//input[@id='j_id0:j_id2:j_id3:j_id4:j_id5']"));
newMasterHealthProgramsLink.Click();

我找到了一个解决方案,说你一定没有实现“等待”。页面不会等待完全加载并尝试查找元素。所以我添加了等待命令,但没有发生任何有用的事情。仍然遇到同样的错误:

TestAutomation.Driver.Login:
OpenQA.Selenium.NoSuchElementException : The element could not be found

最佳答案

由于您的元素位于 IFrame 中,因此您需要使用 WebDriver API“切换”到该 IFrame。

默认情况下,Selenium 将使用“顶部”框架,因此任何“查找元素”查询都将定向到最顶部的框架,并忽略任何子 IFrame。

为了解决这个问题,“切换”到当前 IFrame 会指示 Selenium 将所有请求推送到该框架。

driver.SwitchTo().Frame()

请注意,您需要一种访问帧的方法,可以通过帧的 ID、索引(顶部帧为 0,下一个帧为 1,等等)或名称。

另一个注意事项是,任何进一步的请求都将定向到该 IFrame,忽略任何其他请求,其中包括顶部的请求......因此,如果您需要访问顶部框架,则需要切换回来:

driver.Switch().DefaultContent()

关于c#-4.0 - 无法按名称和 XPath 在 Selenium WebDriver 中找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727617/

相关文章:

c#-4.0 - 获取 Log4Net ILog 实例的目录

regex - 从 Xpath 表达式中删除命名空间

sql-server - tsql for xml,复杂的 xml

java - 从 java 禁用系统代理

selenium - 运行时出现UNABLE_TO_GET_ISSUER_CERT_LOCALLY错误——webdriver-manager通过npm启动

python - 如何重用 selenium 浏览器 session

.net - ASP.Net MVC 3 EF "Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade paths"

xml - namespace 中名为 'name' 的 XML 元素引用了不同的类型

postgresql - 如何在 NpgSql 连接字符串中指定 ApplicationName

用于 Xpath 查询的 SQL Xml