Selenium网络驱动程序.阅读前一行

本文关键字:一行 网络 驱动程序 Selenium | 更新日期: 2023-09-27 18:26:16

试图使用selenium网络驱动程序和C#为我们的项目自动化几个测试,我遇到了以下情况:当我尝试测试主菜单时,流程如下:

  1. 单击第一个菜单项(位于页面顶部)
  2. 等待页面中的最后一个元素加载,这样我就可以确保内容已完全加载(有时加载整个页面需要15-20秒)
  3. 断言位于主菜单下div中的标题文本
  4. 单击下一个菜单项并继续类似的流程

现在我的问题是,在加载页面并且测试必须断言标题文本(3)之后,我会崩溃。我理解之所以会发生这种情况,是因为C#只读取内容一次,一旦读取就无法返回到前一个元素。因此,我认为我的解决方案是首先在变量中定义body标记,然后调用它进行断言和进一步导航:

var body = driver.FindElement(By.TagName("body")); 
driver.FindElement(By.XPath("/html/body/div[1]/div/div[2]/div[2]/div[2]")).Click();    // click on the first item in the main menu
driver.WaitForElement(By.XPath("/html/path_to_the_last/div[1]"));    // waiting for the last element on the page
Assert.AreEqual("Title text", body.FindElement(By.XPath("/html/body/div[1]/div/div[3]/div[3]/div[1]/div/div[1]/div[1]/div[1]/div[1]/div")).Text.Trim());     // assert the title text by calling the initially set variable
body.FindElement(By.XPath("/html/body/div[1]/div/div[2]/div[2]/div[3]")).Click();   // click on the next item in the main menu.
// similar flow to follow until each menu was checked

问题是,当网络驱动程序即将执行断言时——在第一次调用变量的地方,它会崩溃,并出现以下错误:

OpenQA.Selenium.StaleElementReferenceException:在缓存中找不到元素-也许页面在查找后发生了更改

你知道我做错了什么吗?我该怎么做?

Selenium网络驱动程序.阅读前一行

我的猜测是,当从body元素中查找项时,路径不能从根开始。所以在断言中,你应该有这样的:

body.FindElement(By.XPath("./div[1]/div/div[3]/div[3]/div[1]/div/div[1]/div[1]/div[1]/div[1]/div")

起始点表示你的身体元素。