【问题标题】:Unable to locate element | xPath | Selenium Webdriver无法定位元素 |路径 | Selenium 网络驱动程序
【发布时间】:2020-10-29 18:24:27
【问题描述】:

我正在尝试引用并单击网页上的元素。

这是网页:https://www.facebook.com/settings

这是元素:

<div class="linkWrap noCount">Notifications&nbsp;<span class="count _5wk0 hidden_elem uiSideNavCountText">(<span class="countValue fsm">0</span><span class="maxCountIndicator"></span>)</span></div>

这是一个包含“通知”一词的 DIV

我们应该能够使用简单的 xPath 进行引用。如//div[contains(text(), 'Notifications')]

但是,它似乎不起作用。

我使用的chrome extension 说该元素不存在。

我的代码找不到元素。

这是我使用 Selenium Web 驱动程序的 Java 代码。

// Navigate to page
obj.driver.get("https://www.facebook.com/settings");        

// Write to console where we are
System.out.println(obj.driver.getCurrentUrl());

// Wait | Plenty of time for the page to load
Thread.sleep(5000);     

obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]")).click();

这是错误:

真是太奇怪了!关于为什么我不能引用该元素或为什么 xPath 不存在的任何想法。

【问题讨论】:

  • 这能回答你的问题吗? xPath Text Contains Selenium Web Driver
  • Facebook 不允许抓取。这违反了他们的服务条款。
  • JeffC 我不是在刮擦或类似的东西。我只是将一些非常常规的简单任务自动化。
  • DMart 我在下面有一个答案。这是我遇到这种行为的一个非常合理的原因。我会测试一下
  • DMart 下面的答案是正确答案。

标签: selenium xpath


【解决方案1】:

您的元素在 iframe 内。

如果您从您所在的位置向上滚动,您会看到:

对于 selenium,您需要切换帧才能访问其中的元素

我还没有为您的网站尝试过 - 但您使用以下方式切换框架:

driver.switchTo().frame(1); // by index
//<or> 
driver.switchTo().frame("id of the element"); //by id
//<or> 
driver.switchTo().frame(element); // be element

然后,当准备好时切换回主页/框架:

  driver.switchTo().defaultContent();

在此处查看selenium docs 的框架部分

【讨论】:

  • 非常感谢!这就是问题所在。我能够通过这个选择框架: WebElement iframe = obj.driver.findElement(By.xpath("//iframe[@tabindex='-1']")); obj.driver.switchTo().frame(iframe);
猜你喜欢
  • 2015-09-19
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多