【问题标题】:Unable to identify the element even using full xpath即使使用完整的 xpath 也无法识别元素
【发布时间】:2014-05-23 23:27:37
【问题描述】:

在以下所有情况下,我都无法识别元素。请帮我找出代码中的问题。

HTML 代码:

<div id="DetailedNavigationTree" class="SItree">
    <div style="margin-left: 0px; margin-right: 10px; white-space: nowrap;">
       <img src="/irj/portalapps/com.sap.portal.design.portaldesigndatathemes        /portal/Test_theme/nav/treeview/ico12_treeleaf.gif?7.0.24.1.6"/>
       <img id="DetailedNavigationTree/navurl://cd82866421cb92cf96c103eb19061574" src="/irj/portalapps/com.sap.portal.design.portaldesigndata/themes/portal/ford_theme/common/1x1.gif?7.0.24.1.6"/>
       <a class="SItreeText" href="#" style="word-wrap: normal; white-space: nowrap;">Test CRM Centre</a>
</div>

我想点击标签a - Test CRM Centre中的元素

我试过的代码:

driver.findElement(By.cssSelector(".SItreeText")).click();
driver.findElement(By.linkText("Test CRM Centre")).click();
driver.findElement(By.xpath("//html/body/table/tbody/tr[1]/td/div[1]/table/tbody/tr/td[1]/div/div/table/tbody/tr/td/span/table/tbody[2]/tr[2]/td[3]/div/div/div[2]/div/a")).click();
driver.findElement(By.cssSelector("#DetailedNavigationTree")).click();
driver.findElement(By.xpath("//a[contains(@href, '#')]")).click();
driver.findElement(By.xpath("//a[@id = 'navNodeAnchor_2_0']")).click();
driver.findElement(By.xpath("//a[contains(@href, '#')]")).click();
driver.switchTo().frame(driver.findElement(By.xpath("//html/body/table/tbody/tr[1]/td/div[1]/table/tbody/tr/td[1]/div/div/table/tbody/tr/td/span/table/tbody[2]/tr[2]/td[3]/div/div/div[2]/div/a")));

【问题讨论】:

  • 您将需要发布一个更“简单的 HTML”结构......但所有级别。在这种情况下,您正在寻找body-&gt;table-&gt;table row 1-&gt;table date-&gt; div 1 等等,您是否使用表格第 1 行中的表格数据中的表格,表格数据中的表格和嵌套 div 中第三个 TR 位置的 A ?
  • 您好 Kenneth Clark,请告诉我如何发布正确的 HTML 结构。抱歉,我是第一次发布问题。
  • 嗨,我已经给出了正确的结构 HTML。请帮我解决这个问题
  • 您将需要发布 .. 只是页面的 HTML 结构和 div,因此请保持其内容最少&lt;HTML&gt;&lt;BODY&gt;&lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt;&lt;TABLE...&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/BODY&gt; 这将有助于一堆
  • 你的“HTML”中有xmlns(命名空间声明)吗?

标签: java html selenium xpath webdriver


【解决方案1】:

您无法识别元素可能有多种原因。你的一些选择器对我来说一般看起来是正确的。也许回答以下问题可能会有所帮助,

页面上是否有多个链接可用?如果是这样,您可能需要进一步过滤要单击的元素并避免使用通用选择器

 List<WebElement> links = driver.findElements(By.linkText("Test CRM Centre"));
 System.out.println(links.size());

您有任何同步问题吗?就像您在渲染之前尝试单击链接文本一样吗?在这种情况下,您可以使用显式等待

 WebDriverWait wait = new WebDriverWait(driver,30);
 WebElement link = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Test CRM Centre")));
 link.click();

你的元素在任何框架内吗?如果是这样,您需要切换到框架才能找到元素

 WebElement frame = driver.findElement(By.id("myframeid"));
 driver.switchTo().frame(frame);

编辑#1 也许你应该尝试点击图片,

WebElement element = driver.findElement(By.cssSelector("div#DetailedNavigationTree>div>img[id^='DetailedNavigationTree']"));
element.click();

【讨论】:

  • 嗨,当我使用 aboue 代码时,我得到 0 个打印 List links = driver.findElements(By.linkText("Test CRM Centre")); System.out.println(links.size());
  • 我明白了..你对我问的其他两个问题有答案吗?
  • 您有任何同步问题吗? - 否 您的元素是否在任何框架内? - 如何检查框架信息。请帮忙
  • 在 chrome 中打开开发工具栏或使用 firebug。检查元素并检查元素是否在iframe 标签内
  • HTML 中没有 iframe 标签
【解决方案2】:

试试这个//a[@class="SItreeText"]

【讨论】:

  • 您好,奥利夫,感谢您的回复。但还是同样的问题
【解决方案3】:

试试driver.findElement(By.cssSelector("#DetailedNavigationTree .SItreeText")).click();

【讨论】:

  • 同样的问题 Tolo。感谢回复
  • 我将您的 html 片段复制到一个更改 href='http://www.google.com' 的文件中并做了 driver.get("file:///C:/Users/myName/Dev/src/test.html"); driver.findElement(By.cssSelector(".SItreeText")).click();。浏览器导航到 Google
【解决方案4】:

试试这个

By.xpath("//div[@id='DetailedNavigationTree']//a[contains(text(),'Test CRM Centre')]")

By.cssSelector("#DetailedNavigationTree a.SItreeText")

【讨论】:

  • 同样的问题 Santoshsarma
  • 您是否在萤火虫中验证了定位器?是否有多个元素具有相同的定位器?它在 iframe 中吗?可以提供完整的html吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 2014-08-08
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多