Chrome Java

时间:2016-08-18 09:04:53

标签: java selenium xpath selenium-webdriver dhtmlx

我可以通过driver.findElement()函数覆盖所有元素。 树元素是使用dhtmlx库创建的,当我尝试访问它们时,我得到NoSuchElementException

我试图通过id,xpath,class,text等来达到,但它们都没有为我工作。我也尝试了隐式等待和Thread.sleep()方法,但结果是一样的。

 > <tr> <td class="standartTreeImage"> <img border="0" align="absmiddle"
    > style="padding: 0px; margin: 0px; width: 18px; height: 18px;"
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/plus3.gif">
    > </td> <td width="20px" style="display: none;"> <img align="absmiddle"
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/iconUncheckAll.gif"
    > style="width: 16px; height: 16px;"> </td> <td
    > class="standartTreeImage" style="width: 18px;"> <img border="0"
    > align="absmiddle" style="padding: 0px; margin: 0px; width: 18px;
    > height: 18px;"
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/folderClosed.gif">
    > </td> <td class="standartTreeRow" nowrap="" style="width: 100%;
    > font-size: 10pt; cursor: pointer;"> <span class="standartTreeRow"
    > style="padding-left: 5px; padding-right: 5px;">hr-istanbul [15]</span>
    > </td> </tr>

例如,其中一个就是:我需要点击第一个td。只有定位器是图像,但我无法访问该元素.NoSuchElementException。

element = driver.findElement(By.xpath("//img[contains(@src,'http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/plus3.gif')]"));

还试图到达最后一个列元素它也没有用。

element = driver.findElement(By.xpath("//*[contains(text(), 'hr-istanbul [15]')]"));

1 个答案:

答案 0 :(得分:1)

如果您获得NoSuchElementException作为提供的例外情况,可能有以下原因: -

  • 可能是您找到了错误的定位器,因此您需要共享HTML以获得更好的定位器解决方案。

  • 可能是在你要找到元素的时候,它不会出现在DOM上,所以你应该实现WebDriverWait等待元素可见,如下所示: -

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(byObject));
    
  • 此元素可能位于任何frameiframe内。如果是,您需要在找到以下元素之前切换frameiframe: -

    WebDriverWait wait = new WebDriverWait(driver, 10);
    
    //Find frame or iframe and switch
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("your frame id or name"));
    
    //Now find the element 
    WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(byObject));
    
    //Once all your stuff done with this frame need to switch back to default
    driver.switchTo().defaultContent();