NoSuchElementException

NoSuchElementException

我可以通过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]')]"));

最佳答案

如果您将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();
    
  • 关于java - Chrome Java中的Selenium dhtmlxtree NoSuchElementException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39014067/

    10-10 08:34