gpt4 book ai didi

selenium - NoSuchElementException,Selenium 无法定位元素

转载 作者:行者123 更新时间:2023-12-04 11:09:40 28 4
gpt4 key购买 nike

我想在 selenium 中找到我的 TextField,但我不知道如何(我第一次使用 Selenium)。

我试过:

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

或由开发工具中的 chrome 生成的 xPath 和 cssSelector 字符串。

请帮助我,我将不胜感激解释。

这是 html:

enter image description here

最佳答案

无此类元素异常

org.openqa.selenium.NoSuchElementException俗称 NoSuchElementException 扩展 org.openqa.selenium.NotFoundException这是 WebDriverException 的类型.

NoSuchElementException 可以在 2 种情况下抛出,如下所示:

  • 使用时 WebDriver.findElement(By by) :
    //example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));
  • 使用时 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)

    原因

    NoSuchElementException 的原因可能是以下之一:
  • 您采用的定位器策略未识别 HTML DOM 中的任何元素.
  • 您采用的定位器策略无法识别该元素,因为它不在浏览器的 Viewport 中。 .
  • 您采用的定位器策略可识别元素,但由于存在属性 而看不见。风格=“显示:无;” .
  • 您采用的定位器策略没有 唯一标识 HTML DOM 中所需的元素,目前找到一些其他隐藏/不可见的元素。
  • 您尝试定位的 WebElement 位于 <iframe> 内标签。
  • WebDriver 实例甚至在元素在 HTML DOM 中存在/可见之前就在寻找 WebElement。


  • 解决方案

    解决 NoSuchElementException 的解决方案可以是以下之一:
  • 采用 Locator Strategy它唯一标识所需的 WebElement。您可以借助开发人员工具(Ctrl+Shift+I 或 F12)并使用 Element Inspector。

    在这里您可以找到关于 how to inspect element in selenium3.6 as firebug is not an option any more for FF 56? 的详细讨论
  • 使用 executeScript() 滚动元素以查看的方法如下:
    WebElement elem = driver.findElement(By.xpath("element_xpath"));
    ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem);

    在这里您可以找到关于 Scrolling to top of the page in Python using Selenium 的详细讨论
  • Incase 元素具有属性 风格=“显示:无;” , 通过 executeScript() 删除属性方法如下:
    WebElement element = driver.findElement(By.xpath("element_xpath"));
    ((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element)
    element.sendKeys("text_to_send");
  • 检查元素是否在 <iframe> 内向上遍历 HTML 以找到相应的 <iframe>标签和 switchTo()通过以下任一方法获得所需的 iframe:
    driver.switchTo().frame("frame_name");
    driver.switchTo().frame("frame_id");
    driver.switchTo().frame(1); // 1 represents frame index

    在这里您可以找到关于 Is it possible to switch to an element in a frame without using driver.switchTo().frame(“frameName”) in Selenium Webdriver Java? 的详细讨论.
  • 如果该元素不立即出现在 HTML DOM 中/不可见,则引发 WebDriverWaitExpectedConditions设置为适当的方法如下:
  • 等待presenceOfElementLocated :
    new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
  • 等待visibilityOfElementLocated :
    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));
  • 等待elementToBeClickable :
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']")));


  • 引用

    您可以找到 Selenium基于客户的相关讨论:
  • Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome
  • 关于selenium - NoSuchElementException,Selenium 无法定位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471321/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com