【问题标题】:Unable to find "Button" with Selenium in C#在 C# 中无法使用 Selenium 找到“按钮”
【发布时间】:2021-10-01 19:13:27
【问题描述】:

我在使用 Selenium 代码时遇到问题,无法找到一个只有 "Value""type" 的按钮,在检查中它看起来像这样:

<input type="sumbit" value="login" />

Image of inspection

我试了两次,但两条线都不适合我。

线条:

第一种解决方案:

driver.FindElement(By.XPath("//button[contains(text(),'Login')]")).Click();

第二个解决方案:

driver.FindElement(By.ClassName("submit")).Click();

Image with ERROR MESSAGE (second line error)

任何人都可以帮助我,或者至少指出我缺少什么,因为为这种常见的事情找到解决方案非常令人沮丧,我在教程页面上练习了这个,按钮从来都不是问题。

请。 (对不起我的英语)

P.s.:我检查了“类似的问题,我还没有找到解决方案。

P.s.s:伙计们,还有一个我还没有尝试过,但我有 3 行不同的代码,你认为其中一个可以工作吗:

有下拉列表,我想选择列表中的最后一项...

driver.FindElement(By.XPath("//*[contains(., 'Process Data >>')]"));

driver.FindElement(By.Id("pdatasub")).Click();

driver.FindElement(By.XPath("//div[text()='处理数据>>']")).Click();

Inspection of the Drop-down list

打开下拉列表中最后一个“按钮”的代码:

driver.FindElement(By.XPath("//div[text()='Final Values']")).Click();

enter link description here

感谢大家的帮助!

【问题讨论】:

  • 你能分享一个指向那个页面的链接吗?
  • 哪一页?因为我正在尝试做的是在机器内部,所以我正在尝试做一个项目,我通过以太网连接到机器,加载带有通过 IP 获得的设置的页面,然后我想登录并下载备份。这一切都是自动完成的,但遗憾的是我在登录过程中卡住了。
  • 好的。你能分享整个页面的HTML代码吗?登录页面,如果有问题。
  • 我刚刚在主帖中添加了另一部分,我明天可以尝试这样做,因为 PLC 正在工作,我没有在家连接。 :(

标签: c# selenium


【解决方案1】:

您使用了错误的定位器:

试试这个:

driver.FindElement(By.XPath("//input[@type='submit' and @value='Login']")).Click();

ExplicitWaits

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@type='submit' and @value='Login']"))).Click();

【讨论】:

  • 谢谢!我会试试的。 :)
  • 当你尝试这个driver.FindElement(By.XPath("//input[@type='submit' and @value='Login']")).Click();时你看到了什么异常?
【解决方案2】:

您的定位器错误。
你可以使用这个:

driver.FindElement(By.XPath("//button[@type='submit']")).Click();

driver.FindElement(By.XPath("//button[@value='login']")).Click();

driver.FindElement(By.XPath("//button[@value='login' and @type='submit']")).Click();

CSS 选择器也可以类似地使用。
还有几个可能的问题:

  1. 您应该在访问该元素之前添加一个等待。否则,您会在页面仍未加载时尝试查找元素。预期条件是执行此操作的首选方式。
  2. 元素可以在 iframe 中。如果是这样,您必须切换到该 iframe 才能访问其中的元素。

【讨论】:

  • 每行代码后面都有Thread.Sleep(1000)。感谢您的帮助!
  • 好的,你有没有试过使用我在这里写的定位器/代码?
  • 我会的,因为我必须直接连接到机器,我明天可以在工作中尝试这个,因为很遗憾,我家里没有 PLC。 (老实说,我不知道我会这么快得到答案,你们这里太好了)我添加了我前面的步骤,因为你的反应如此之快我只是想仔细检查下一步是否可行.
  • driver.FindElement(By.XPath("//button[@type='submit']")).Click();这个没用。
  • @damiensprinkle 不确定这会对我们有所帮助。
猜你喜欢
  • 2015-07-12
  • 2018-10-16
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
相关资源
最近更新 更多