即使使用完整的xpath也无法识别元素

时间:2014-05-23 12:04:22

标签: java html selenium xpath webdriver

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

HTML code:

<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>

我想点击标记&lt; 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")));

4 个答案:

答案 0 :(得分:2)

可能有几个原因导致您无法识别元素。您的一些选择器通常对我来说是正确的。或许回答以下问题可能有所帮助,

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

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

您有任何同步问题吗?就像你试图在它渲染之前点击linkText一样?在这种情况下,您可以使用显式等待

 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();

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个

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

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