C# 在C中使用Selenium Web驱动程序查找元素#

C# 在C中使用Selenium Web驱动程序查找元素#,c#,internet-explorer,selenium,webdriver,C#,Internet Explorer,Selenium,Webdriver,因此,我一直在学习如何在C#中使用Selenium为项目进行一些自动化测试。然而,我在这一点上遇到了障碍。我一直在想办法点击这个网页上的以下链接 以下是我的目标: 通过ClassName进行搜索时没有发现任何结果。虽然有倍数,但我只是想看看是否能检测到它们的存在 By.ClassName("PortalLink") 我尝试使用CssSelector进行基于href的搜索,但也失败了 By.CssSelector(“[href*=”https://mywebsite.com/myprogram

因此,我一直在学习如何在
C#
中使用
Selenium
为项目进行一些自动化测试。然而,我在这一点上遇到了障碍。我一直在想办法点击这个网页上的以下链接

以下是我的目标:

通过
ClassName
进行搜索时没有发现任何结果。虽然有倍数,但我只是想看看是否能检测到它们的存在

By.ClassName("PortalLink")
我尝试使用
CssSelector
进行基于
href
的搜索,但也失败了

By.CssSelector(“[href*=”https://mywebsite.com/myprograms/launchprogram.jsp?“]”

最后,我尝试使用
XPath
并按类和跨内容进行搜索,但也没有找到链接

By.XPath(//A[contains(@class,'PortalLink')和span[text()='MyProgram']]))

这个有问题的网页包含两个框架,我两个都试过了


我等了200秒才超时。我做错了什么?提前感谢您的帮助

假设在ajax过程中没有将该元素附加到DOM中,您的语句应该是

By.CssSelector("a.PortalLink[href*='launchprogram.jsp']")

如果有多个这样的链接,那么我们需要在父子层次结构中进一步升级,因为此链接没有使此链接唯一的属性。

如果您可以发布此链接的父html,那么我们可以建议更多选项

你能试试这些

 //span[contains(text(),'MyProgram']
//span[contains(text(),'MyProgram']/../

FindElements(By.ClassName(“PortaLink”)
应该返回一个
IEnumerable
,该类的所有实例都在页面上。之后,您可以使用其他属性对它们进行迭代,以选择所需的属性。如果这对你不起作用,那么问题很可能出在其他地方(比如页面没有加载,或者你的自动化系统没有实际查看你认为是的页面/父元素)。@evanmcdonnal:是的,我使用foreach循环将它们中的每一个都写到了控制台上,但是集合中从来没有任何东西。我们从别处开始寻找,因为很可能还有其他错误。通过代码,仔细检查可能影响
FindElements
返回值的值。您说过页面中有框架。你是在切换到它们吗?@Arran:我在测试中明确地切换到了两者。