当前位置: 首页 > 知识库问答 >
问题:

Chrome驱动程序无法找到网页上的元素,尽管我之前已经验证了这些元素

司徒河
2023-03-14
    null

我查找了一些类似的问题,并尝试在定位元素之前实现一些代码,但是:

  • driver.switchto().defaultContent();-->对我没有任何帮助
  • driver.manage().timeouts().implicitwait=timespan.fromseconds(2);---->也没有帮助

这是运行良好的代码:

            driver.Url = "http://automationpractice.com/index.php";

            var newSearch = driver.FindElement(By.Id("search_query_top"));
            newSearch.SendKeys("top");
            var searchConfrim = driver.FindElement(By.Name("submit_search"));

            searchConfrim.Click();

        }
    }
} 
namespace ConsoleApplication_training
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.ReadKey();
            var page = new WebPage();
            page.ClickButton();
        }
    }

    internal class WebPage
    {
        private IWebDriver driver;
        private string websiteUrl;

        public IWebDriver Driver
        {
            get { return new ChromeDriver(); }
        }

        public string WebsiteUrl
        {
            get { return "http://automationpractice.com/index.php"; }

            set
            {
                websiteUrl = value;
            }
        }

        public WebPage()
        {
            Driver.Navigate().GoToUrl(WebsiteUrl);
            Driver.SwitchTo().DefaultContent();
            Driver.FindElement(By.Id("search_query_top"));
        }

        public void ClickButton()
        {
            Driver.FindElement(By.Name("submit_search")).Click();
        }
    }
}

有谁能帮助解决这个问题或指出问题的原因吗?

共有1个答案

邵刚洁
2023-03-14

问题的根源是对ChromeDriver生存期的误解。在接下来的代码行中,您将为每次调用driver属性创建一个新的驱动程序实例

public IWebDriver Driver
    {
        get { return new ChromeDriver(); }
    }

对于您的示例,您只需创建一次ChromeDriver实例,例如,使用私有属性:

private readonly IWebDriver _driver = new ChromeDriver();
public IWebDriver Driver => _driver;

但是如果您有多个页面,这种方法会导致其他错误。因此,最好单独创建一个web驱动程序实例,并通过构造函数将其传递给页面。

 类似资料:
  • 我正在使用Java和Firefox和Firebug,我无法找到第二页上的元素。例如,如果我登录gmail,我就无法找到并点击已发送邮件或下一页上的任何其他按钮。 我尝试使用xpath(绝对值和相对值),但每次我都得到一个错误,即找不到元素。使用代码,我可以成功登录,但一旦页面加载,就会出现错误“元素未找到”。 请提出任何解决方案

  • 我将硒与python中的Chrome驱动程序一起使用。 我的问题是,硒给我一个错误,因为我试图访问铬下载页面上的元素(铬://下载)。例如,我试图获取文件url"http://file.jpg"。 但当我试图通过其id获取元素时,我得到了一个异常。 代码: 例外情况: 通过 使用 javascript 对我也不起作用。为什么当我可以在浏览器中看到元素时,我会收到 ?

  • 当我试图将元素放入元素中时,我面临一个问题。我尝试了两种方法来实现这一点,但不幸的是没有成功。 上面的代码获取所有DOM元素列表。 方法1: 当我尝试这个方法时,它总是返回第一个元素的文本,而不是相应的元素文本。 在搜索时,我发现了一个链接,有人问了和我一样的问题。 Selenium Webdriver在子元素中查找元素 当我尝试答案时,它给了我一个空白数组。 结果: 请建议我如何实现这一点,如何

  • 编辑:有人在评论中要求我展示我是如何定义链接的:

  • 环境:Eclipse-Java-Junit-Firefox web driver 屏幕截图网址 : https://www.dropbox.com/s/26fl2l1y1mkpxiz/Screenshot 2014-01-06 01.52.43.png 我试图测试一个网页,但找不到元素(看起来像按钮)。Firebug的xpath是:<code>/*〔@id='DERIVED_REGFRM1_LIN

  • 我想通过C#使用Selenium web驱动程序定位BNK1的值。我发现我的本地网站有2个iframe。我已经尝试改变,使我的iframe更改为详细的框架,为我获得我的值BNK1在表中。我不知道我无法使用XPath找到iframe的问题是怎么回事。 但我出现错误“没有这样的元素:无法定位元素:{”method“:”XPath“,”selector“:”//IFRAME[@class='tabcon