NoSuchElementException,Selenium无法找到元素 [英] NoSuchElementException, Selenium unable to locate element

查看:77
本文介绍了NoSuchElementException,Selenium无法找到元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在硒中找到我的TextField,但我不知道如何(我第一次使用Sellenium).

我尝试过:

 driver.findElement(By.id("originTextField"))

或通过xPath和cssSelector由chrome在开发工具中生成的字符串.

请帮助我,我会感谢您的解释.

这是html:

解决方案

NoSuchElementException

org.openqa. selenium.NoSuchElementException (通常称为 NoSuchElementException )扩展了

  • 使用WebElement.findElement(By by)时:

    //example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));
    

  • 按照JavaDocs的规定,与其他 WebDriverException 一样, NoSuchElementException 应该包含以下常量字段:

    Constant Field      Type                                        Value
    SESSION_ID          public static final java.lang.String        "Session ID"
    e.g. (Session info: chrome=63.0.3239.108)
    
    DRIVER_INFO         public static final java.lang.String        "Driver info"
    e.g. (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86)
    
    BASE_SUPPORT_URL    protected static final java.lang.String     "http://seleniumhq.org/exceptions/"
    e.g. (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html)
    


    原因

    出现 Element异常的原因可以是以下任一原因:

    • 您采用的定位器策略视口.
    • 您采用的定位器策略可以识别元素,但是由于存在属性 style ="display:none;" 而不会显示.
    • 您采用的定位器策略不能唯一标识 HTML DOM 中所需的元素,并且当前可以找到其他隐藏/不可见元素.
    • 您要查找的 WebElement 位于<iframe>标记内.
    • 甚至在元素在 HTML DOM 中存在/可见之前, WebDriver 实例仍在寻找 WebElement .

    解决方案

    解决 NoSuchElementException 的解决方案可以是以下任意一种:


    参考

    您可以找到 Selenium 的<在基于客户端的相关讨论中,使用href ="/questions/tagged/python" class ="post-tag" title =显示标记为'python'" rel ="tag"> python 基于客户端的问题

    i would like to find my TextField in selenium, but i dont know how (i use sellenium for the first time).

    I tried:

     driver.findElement(By.id("originTextField"))
    

    or by xPath and cssSelector String generated by chrome in dev tools.

    Please help me, i would appreciate explanation.

    this is html:

    解决方案

    NoSuchElementException

    org.openqa.selenium.NoSuchElementException popularly known as NoSuchElementException extends org.openqa.selenium.NotFoundException which is a type of WebDriverException.

    NoSuchElementException can be thrown in 2 cases as follows :

    • When using WebDriver.findElement(By by) :

      //example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));
      

    • When using WebElement.findElement(By by) :

      //example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));
      

    As per the JavaDocs just like any other WebDriverException, NoSuchElementException should contain the following Constant Fields :

    Constant Field      Type                                        Value
    SESSION_ID          public static final java.lang.String        "Session ID"
    e.g. (Session info: chrome=63.0.3239.108)
    
    DRIVER_INFO         public static final java.lang.String        "Driver info"
    e.g. (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86)
    
    BASE_SUPPORT_URL    protected static final java.lang.String     "http://seleniumhq.org/exceptions/"
    e.g. (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html)
    


    Reason

    The reason for NoSuchElementException can be either of the following :

    • The Locator Strategy you have adopted doesn't identifies any element in the HTML DOM.
    • The Locator Strategy you have adopted is unable to identify the element as it is not within the browser's Viewport.
    • The Locator Strategy you have adopted identifies the element but is invisible due to presence of the attribute style="display: none;".
    • The Locator Strategy you have adopted doesn't uniquely identifies the desired element in the HTML DOM and currently finds some other hidden / invisible element.
    • The WebElement you are trying to locate is within an <iframe> tag.
    • The WebDriver instance is looking out for the WebElement even before the element is present/visibile within the HTML DOM.

    Solution

    The solution to address NoSuchElementException can be either of the following :

    • Adopt a Locator Strategy which uniquely identifies the desired WebElement. You can take help of the Developer Tools (Ctrl+Shift+I or F12) and use Element Inspector.

      Here you will find a detailed discussion on how to inspect element in selenium3.6 as firebug is not an option any more for FF 56?

    • Use executeScript() method to scroll the element in to view as follows :

      WebElement elem = driver.findElement(By.xpath("element_xpath"));
      ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem);
      

      Here you will find a detailed discussion on Scrolling to top of the page in Python using Selenium

    • Incase element is having the attribute style="display: none;", remove the attribute through executeScript() method as follows :

      WebElement element = driver.findElement(By.xpath("element_xpath"));
      ((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element)
      element.sendKeys("text_to_send");
      

    • To check if the element is within an <iframe> traverse up the HTML to locate the respective <iframe> tag and switchTo() the desired iframe through either of the following methods :

      driver.switchTo().frame("frame_name");
      driver.switchTo().frame("frame_id");
      driver.switchTo().frame(1); // 1 represents frame index
      

      Here you can find a detailed discussion on Is it possible to switch to an element in a frame without using driver.switchTo().frame("frameName") in Selenium Webdriver Java?.

    • If the element is not present/visible in the HTML DOM immediately, induce WebDriverWait with ExpectedConditions set to proper method as follows :

      • To wait for presenceOfElementLocated :

        new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
        

      • To wait for visibilityOfElementLocated :

        new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
        

      • To wait for elementToBeClickable :

        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
        


    Reference

    You can find Selenium's client based relevant discussion in:

    这篇关于NoSuchElementException,Selenium无法找到元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆