【问题标题】:Unsolved Selenium clicking on a href in <li>未解决的 Selenium 单击 <li> 中的 href
【发布时间】:2021-01-07 23:19:07
【问题描述】:

ERROR ON "var links = driver.FindElement(By.XPath("/html/body/div[2]/div[1]/div/div/div/div[1]/div/nav/ol/ li[3]"));"

我在单击 li 标记(var 链接)中的 selenium 链接时遇到问题,尽管它可以通过手动单击。我尝试了很多方法,但还没有找到一种有效的方法;搜索stackoverflows已经存在的问题,也没有帮助。

无论我使用什么选择器类型,这都是我得到的错误 OpenQA.Selenium.NoSuchElementException:'没有这样的元素:无法找到元素

我的代码

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;

    namespace BookFetcher
    {
        public static class Program
        {
            public static void Main()
            {
    
    
                IWebDriver driver = new ChromeDriver(@"C:\");
                driver.Manage().Window.Maximize();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                driver.Navigate().GoToUrl("http://xn--epik-0qa.ee/minu-konto/");
                driver.FindElement(By.XPath("//*[@id='username']")).SendKeys("");
                driver.FindElement(By.XPath("//*[@id='password']")).SendKeys("");
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                driver.FindElement(By.XPath("/html/body/div[2]/div[1]/div[1]/div/div/div/div/div[1]/form/p[3]/button")).Click();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                driver.FindElement(By.XPath("/html/body/header/div/div/nav[2]/ul/li[2]/a")).Click();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                var element = driver.FindElement(By.XPath("/html/body/div[3]/div[1]/section[1]/div[3]/div[94]/p[2]/a"));
                Actions actions = new Actions(driver);
                actions.MoveToElement(element);
                actions.Perform();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                element.Click();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                var links = driver.FindElement(By.XPath("/html/body/div[2]/div[1]/div/div/div/div[1]/div/nav/ol/li[3]"));;
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                links.Click();
                Console.ReadLine();
            }
        }
    }

HTML 源代码

<div class="content-area">
        <div class="epub">
            <div class="column epub-nav">
                <div class="epub-nav-inner">
                    <div class="epub-meta">
                        <p>uid: 978-9949-559-55-8</p><p>creator: </p><p>publisher: Maurus</p><p>subject: </p>                   </div>
                                <nav epub:type="toc" id="toc">
                <ol>
                                        <li>
                        <a href="?currentPage=3">Tööraamatu kasutajale</a>
                    </li>
                                        <li>
                        <a href="?currentPage=4">1. Arvuhulgad ja avaldised</a>
                    </li>
                                        <li>
                        <a href="?currentPage=4">1.1. Arvuhulgad</a>
                    </li>
                                        <li>
                        <a href="?currentPage=7">1.2. Tehted astmete ja juurtega</a>
                    </li>

我已经请求过一次帮助,但是提供的解决方案似乎无法解决问题,所以我想我会再试一次,希望有人帮助我。

【问题讨论】:

  • 哪一行出现错误?
  • 很抱歉最初没有在帖子中包含该内容,我对stackoverflow和编码本身还是很陌生。这是第 33 行
  • 第 33 行为你对应这一行 links.Click();?
  • var links = driver.FindElement(By.XPath("/html/body/div[2]/div[1]/div/div/div/div[1]/div/nav/ ol/li[3]"));;
  • 查看更新后的答案,如果您要单击的文本打印到控制台,请告诉我。

标签: c# html selenium selenium-webdriver web


【解决方案1】:

也许有一个 iframe。

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;

namespace BookFetcher
{
    public static class Program
    {
        public static void Main()
        {


            IWebDriver driver = new ChromeDriver(@"C:\");
            driver.Manage().Window.Maximize();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            driver.Navigate().GoToUrl("http://xn--epik-0qa.ee/minu-konto/");
            driver.FindElement(By.XPath("//*[@id='username']")).SendKeys("");
            driver.FindElement(By.XPath("//*[@id='password']")).SendKeys("");
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            driver.FindElement(By.XPath("/html/body/div[2]/div[1]/div[1]/div/div/div/div/div[1]/form/p[3]/button")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            driver.FindElement(By.XPath("/html/body/header/div/div/nav[2]/ul/li[2]/a")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            var element = driver.FindElement(By.XPath("/html/body/div[3]/div[1]/section[1]/div[3]/div[94]/p[2]/a"));
            Actions actions = new Actions(driver);
            actions.MoveToElement(element);
            actions.Perform();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            element.Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            var iFrame = driver.FindElement(By.Xpath("//iframe"));
            driver.SwitchTo().Frame(iFrame);
            var links = driver.FindElement(By.XPath("//a[@href='?currentPage=4']"));
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            links.Click();
            Console.ReadLine();
        }
    }
}

【讨论】:

  • OpenQA.Selenium.NoSuchElementException: '没有这样的元素:无法找到元素:{"method":"xpath","selector":"//a[@href='?currentPage=4 ']"}(会话信息:chrome=85.0.4183.102)'
  • @Chris 你能添加一个链接到你提到的上一个问题,这样我就可以看到之前的建议也没有用。
  • stackoverflow.com/questions/63982298/… 也非常感谢您的积极帮助,非常感谢!
  • @Jortega 可能 OP 需要 SeleniumExtras.WaitHelpers.
  • @DebanjanB 您的回答应该有效。我在想这里还有其他事情发生,但无法进入实际页面,我只能猜测。
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 2015-01-17
  • 2013-04-24
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多