【问题标题】:Can't find this element on page even though it is exist C# selenium即使存在 C# selenium,也无法在页面上找到此元素
【发布时间】:2018-06-16 16:40:19
【问题描述】:

我尝试查找此元素的时间最长,但我无法弄清楚。我的目标也是使用 setattribute 将值设置为数字,但我找不到元素。

<input type="tel" id="cvNumber" tabindex="1" data-shortname="cvv" class="cc-input ncss-input pt2-sm pr4-sm pb2-sm pl4-sm u-align-center" "cvv"="" autocomplete="off" autocorrect="off" value="" maxlength="4">

这是我用来尝试查找元素的一些代码

driver.FindElement(By.XPath("//input[@class='cc-input ncss-input pt2-sm pr4-sm pb2-sm pl4-sm u-align-center');
driver.FindElement(By.Id("cvNumber");
driver.FindElement(By.XPath("//input[@id='cvNumber'");
driver.FindElement(By.className("cc-input ncss-input pt2-sm pr4-sm pb2-sm pl4-sm u-align-center");
driver.FindElement(By.XPath("//input[@type='tel'");

提前致谢

【问题讨论】:

  • 所有行都无效:注意FindElement() 没有右括号,XPath 表达式中也没有右方括号
  • 当您尝试使用 driver.FindElement(By.Id("cvNumber"); 时,它返回什么?
  • 忘记它们是无效的,这不是我无法定位元素的关键,因为 html 有一些问题,所以我需要找到另一种方法
  • 该元素在页面源中是否可见? (网页右键查看页面源码)

标签: c# selenium selenium-webdriver xpath webdriver


【解决方案1】:

我不认为元素选择器有什么问题。可能是您等待元素的时间不够长

 var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
 var myElement = wait.Until(x => x.FindElement(By.Id("cvNumber")));
 if(myElement.Displayed) {
   //do stuff
 }

或者元素可能在一个框架内,所以你需要在执行上面的代码之前切换到框架。

driver.SwitchTo().Frame(driver.FindElement(By.id("frameId")));

【讨论】:

  • 我必须切换到正确的框架,非常感谢。
【解决方案2】:

试试这个代码:

driver.FindElement(By.XPath("//input[@id='cvNumber'][@type='tel']");

【讨论】:

  • 仍然出现无法定位元素的错误
  • 你能检查 iframe 吗?
【解决方案3】:

根据您共享的 HTML,您可以使用以下位置策略

Xpath

.//*[@id='cvNumber']

CSS 选择器

#cvNumber

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2017-11-15
    相关资源
    最近更新 更多