【问题标题】:Webdriver doesn't find any elements by id or class NoSuchElementExceptionWebdriver 没有通过 id 或类 NoSuchElementException 找到任何元素
【发布时间】:2016-10-12 20:33:35
【问题描述】:

我正在尝试从公共网站的 div 中获取数据。 Selenium WebDriver 似乎没有找到任何元素。即使使用 XPath,我也尝试找到具有 id 和 class 的元素,但仍然没有找到任何东西。 查看 PageSource 时我可以看到 html 页面代码,这证实了驱动程序工作正常。我在这里做错了什么? Selenium V2.53.1 // IEDriverServer Win32 v2.53.1

我的代码:

    IWebDriver driver = new InternetExplorerDriver("C:\\Program Files\\SeleniumWebPagetester");
    driver.Navigate().GoToUrl("D:\\test.html");
    await Task.Delay(30000);
    var src = driver.PageSource; //shows the html page -> works
    var ds = driver.FindElement(By.XPath("//html//body")); //NoSuchElementException
    var test = driver.FindElement(By.Id("aspnetForm")); //An unhandled exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll
    var testy = driver.FindElement(By.Id("aspnetForm"), 30); //'OpenQA.Selenium.NoSuchElementException'
    var tst = driver.FindElement(By.XPath("//*[@id=\"lx-home\"]"), 30); //'OpenQA.Selenium.NoSuchElementException'
    driver.Quit();

简单的 HTML 页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <form action="#" id="aspnetForm" onsubmit="return false;">
         <section id="lx-home" style="margin-bottom:50px;">
          <div class="bigbanner">
            <div class="splash mc">
              <div class="bighead crb">LEAD DELIVERY MADE EASY</div>
            </div>
          </div>
         </section>
        </form>
    </body>
</html>

附注,我的 XPath 与 HtmlWeb 完美搭配:

    string Url = "D:\\test.html";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(Url);
    var element = doc.DocumentNode.SelectNodes("//*[@id=\"lx-home\"]"); //WORKS

【问题讨论】:

  • 代码在我看来没问题。您能否在“GoToUrl”步骤之后尝试显式等待,以及是否可以读取 div 元素?想检查 webdriver 是否只是表单本身或所有元素有问题。
  • 另外,请提及 IE 和驱动程序版本
  • @Sid 我为您更新了代码,在正文中添加了等待和 xpath。我什至删除了 html 页面上的 from,没有运气
  • 在任何框架/iframe 中是否存在元素??
  • 造成此类问题的一般因素有: 1. 浏览器和驱动程序版本不匹配。并非所有驱动程序版本都适用于所有浏览器版本 2. 驱动程序没有实现页面刷新 - 页面等待 3. 元素被其他一些元素重叠 - 元素不可见或类似 4. 未选择框架/iframe - 元素不会被搜索页面右侧部分尝试: var clss = driver.FindElement(By.Class("bigbanner"), 30);并让我们知道是否找到了该元素。

标签: c# internet-explorer selenium xpath selenium-webdriver


【解决方案1】:

似乎 IE 以不同的方式解析本地文件,因此您无法访问 DOM。以下是您的选择:

  1. 使用 Chrome 代替 IE
  2. 继续使用 IE,将文件移动到 C:\inetpub\wwwroot,然后将代码更改为打开 URL 而不是本地文件:driver.Navigate().GoToUrl("http://localhost/test.html");

【讨论】:

  • 谢谢!使用 Chrome,托管 html 文件并将驱动程序从程序文件中移出就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2021-06-22
  • 2018-02-21
  • 2014-11-12
  • 1970-01-01
  • 2015-09-13
  • 2018-04-09
相关资源
最近更新 更多