【问题标题】:Selenium chromedriver unable to locate href tag nested inside class tagsSelenium chromedriver 无法找到嵌套在类标签内的 href 标签
【发布时间】:2021-01-10 14:09:22
【问题描述】:

我正在使用selenium web-driver,我要捕获或点击 这个 HTML 标记为

\<a class="sub-nav-link style-scope app-shell active" href="#/trend-analysis/tag-search"\>

我尝试使用 Driver.findElement(By.xpath(//a[@href='#/trend-analysis/tag-search']")).click();

<div class="collapse navbar-collapse style-scope app-shell" id="navbarNav">
                <ul class="app-nav navbar-nav mr-auto style-scope app-shell">
                    <li class="nav-item style-scope app-shell">
                        <a class="nav-link p-3 px-4 style-scope app-shell" href="/#/dashboard">Dashboard</a>
                    </li>
                    <li class="nav-item style-scope app-shell">
                        <a class="nav-link py-3 px-4 style-scope app-shell active" href="/#/trend-analysis/tag-search">Trend
                            Analysis</a>
                        <ul class="sub-nav d-flex flex-row flex-nowrap list-unstyled style-scope app-shell">
                            <li class="sub-nav-item style-scope app-shell">
                                <a class="sub-nav-link style-scope app-shell active" href="#/trend-analysis/tag-search">
                                    Trend Analysis
                                </a>

错误

Unable to locate element: {"method":"xpath","selector":"//*[@href='/#/trend-analysis/tag-search']"}

我的猜测是它没有检测到这个href,因为它深埋在许多&lt;a&gt;&lt;class&gt; 标签下。请指导我。

新错误 没有这样的元素:无法定位元素:{"method":"xpath","selector":"//li[@class='nav-item style-scope app-shell']/a[contains(@href, '#/趋势分析/标签搜索')]"}

driver.findElement(By.xpath("//li[@class='nav-item style-scope app-shell']/a[contains(@href,'#/trend-analysis/tag-search')]")).click();

【问题讨论】:

  • 试试 driver.findElement(By.cssSelector("a.sub-nav-link.style-scope.app-shell.active")).click()

标签: java html selenium-chromedriver


【解决方案1】:

这可能符合 NAA(不是答案)的资格,但我没有发布 cmets 的声誉......你可以删除它,我不会被冒犯的。

我每天都会解析# URL's。如果您查看以下Stack Overflow answer,您会看到一些关于在 URL 中使用 # 和 Selenium。

注意: URL 中的 # 的典型目的是使 自引用-链接 这意味着 URL 通常指向与您当前正在查看的页面完全相同的 URL - 但准确地说,指向页面上的不同位置。

如果 URLHREF 您尝试使用 X-Path 语句在您的代码中定位>Selenium 根据this web-site,Java-Script ( AJAX) 被调用,也许 Selenium 没有看到 HREF 你的 X-Path 语句认为它应该的方式看起来像。

链接网站的重要摘录:

http://mywebsite.com/#/page1 被访问时,它将执行一个ajax 请求我们的传统 url http://mywebsite.com/page1 获取 该页面的 HTML,并将页面内容加载到我们现有的 页面。

长话短说:你的 X-Path 有一个 # 英镑符号,这意味着它是 的“特殊类型” URL 可能需要特殊类型的 X-Path...(这是我实际上无法提供的答案,因为我不知道 :) p>

【讨论】:

    【解决方案2】:

    实际上,在您的回答中,您没有第一个“这是问题吗????”

    因为:

    driver.findElement(By.xpath("//a[@href='#/trend-analysis/tag-search']")).click();
    

    看起来效果不错

    如果问题出在下面的人所说的 # 上,也许这会解决它:

    driver.findElement(By.xpath("//li[@class='nav-item style-scope app-shell']/a[contains(@href,'#/trend-analysis/tag-search')]")).click();
    

    希望我能帮忙

    【讨论】:

    • 没有这样的元素:无法定位元素:{"method":"xpath","selector":"//li[@class='nav-item style-scope app-shell'] /a[contains(@href,'#/trend-analysis/tag-search')]"}
    • 我已经向你展示了原来的错误现在是新的,它只是没有检测到元素
    • 好的,你能发个链接吗,因为网站上的框架可能有问题,xpath没有错,这个问题不是来自#
    • 该应用程序很敏感,除此之外还需要用户登录,如果您需要,我可以给您发送特定代码 (HTML)..
    • 用python烧瓶,java + node.js编写
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多