【问题标题】:Code works in java but not in c# or no equivalent is found代码在 java 中有效,但在 c# 中无效,或者找不到等效代码
【发布时间】:2021-02-11 04:51:28
【问题描述】:

我正在尝试单击网页上的每个链接 (selenium + C#) 。下面的代码在 java 中工作,但试图让它在 c# 中工作是具有挑战性的。我遇到的问题是代码中的 get[i] 和和弦。我在 C# 中找不到等价物。除了 get[i] 和和弦之外,其余的代码都可以工作。任何想法如何将 for 循环中的这两个转换为 c# 或修改最后两行代码?代码的逻辑在java中肯定是有效的。

IWebElement links3 = OpenPageSteps.driver1.FindElement(By.XPath("//*[@id='content']/ul"));
Console.WriteLine(links3.FindElements(By.TagName("a")).Count());
for (int i=0; i<links3.FindElements(By.TagName("a")).Count; i++)
{
    string opentabs = Keys.Chord(Keys.Control,Keys.Enter);
    links3.FindElements(By.TagName("a")).get[i].SendKeys(opentabs);
}

【问题讨论】:

  • 我认为您只需要 list_object[i] 而不是 .get... 我相信键弦已被弃用。使用 SendKeys(Keys.Control, Keys.Return)
  • 你的意思是这样的吗? links3.FindElements(By.TagName("a")).list_object[i].SendKeys(opentabs);它不喜欢它

标签: java c# selenium webdriver


【解决方案1】:

您不需要get 关键字。您可以简单地将索引器与[]一起使用

IWebElement links3 = OpenPageSteps.driver1.FindElement(By.XPath("//*[@id='content']/ul"));
ReadOnlyCollection<IWebElement> aTags =  links3.FindElements(By.TagName("a"));
Console.WriteLine(aTags.Count);
for (int i = 0; i < aTags.Count; i++)
{
    aTags[i].SendKeys(Keys.Control + Keys.Enter);
}

或者,更好的是,使用foreach

foreach (IWebElement element in aTags)
{
    element.SendKeys(Keys.Control + Keys.Enter);
}

您可以简单地使用+ 组合键。

ReadOnlyCollection 有一个 Count 属性。无需调用效率较低的 LINQ Count() 方法。

另外,首先将结果存储在临时文件中,而不是重复相同的FindElements 3 次。

【讨论】:

  • 谢谢。是否可以检查加载的每个页面都将正确加载并且不返回未找到的 404 页面?我正在考虑在主循环中添加另一个 for 循环
  • 你应该找到返回404的原因并排除错误。
猜你喜欢
  • 2021-06-06
  • 2021-12-09
  • 2014-02-03
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2019-11-11
  • 2014-03-21
  • 2012-09-21
相关资源
最近更新 更多