【问题标题】:Finding element using Selenium Web Driver in C#在 C# 中使用 Selenium Web Driver 查找元素
【发布时间】:2013-09-17 09:50:00
【问题描述】:

所以我一直在努力学习如何在C# 中使用Selenium 为项目做一些自动化测试。但是,我在这个问题上遇到了障碍。我一直在想办法点击此网页上的以下链接。

这是我想要的目标:

<A class='PortalLink' HREF="https://mywebsite.com/myprograms/launchprogram.jsp?" onClick="setUser('login','password');"><span>MyProgram</span></A>

ClassName 的搜索没有找到任何结果。虽然有多个,但我只是想看看我是否能检测到它们的存在。

By.ClassName("PortalLink")

我尝试使用CssSelector 进行基于href 的搜索,但也失败了。

By.CssSelector("[href*='https://mywebsite.com/myprograms/launchprogram.jsp?']")

最后,我尝试使用XPath 并按类和跨度内容搜索,但这也找不到链接。

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

有问题的网页包含两个我都尝试过的框架。

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

【问题讨论】:

  • FindElements(By.ClassName("PortaLink")) 应该返回一个 IEnumerable<IWebElement> 以及页面上该类的所有实例。之后,您可以使用其他属性对它们进行迭代以选择您想要的。如果这对您不起作用,那么问题很可能出在其他地方(例如页面尚未加载,或者您的自动化实际上并未查看您认为的页面/父元素)。
  • @evanmcdonnal:是的,我使用 foreach 循环将它们中的每一个都写到了控制台——但集合中从来没有任何东西。
  • 好吧,开始寻找其他地方,因为很可能还有其他问题。单步执行代码,检查可能影响FindElements 返回值的值。
  • 您说页面中有框架。你要改用他们吗?
  • @Arran:我在测试期间明确切换到两者。

标签: c# internet-explorer selenium webdriver


【解决方案1】:

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

你能试试这些吗……

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

【讨论】:

    【解决方案2】:

    假设在ajax期间这个元素没有附加到DOM,你的语句应该是

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

    如果有多个这样的链接,那么我们需要在父子层次结构中更上一层楼,因为这个链接没有更多的属性可以使这个链接独一无二。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2020-02-17
      • 2019-05-30
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多