尝试使用selenium webdriver和C#自动化我们项目的几个测试,我遇到了以下情况: 当我尝试测试主菜单时,流程如下:
现在我的问题是,在页面加载并且测试必须断言标题文本(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
问题是,当webdriver即将执行断言时 - 首先调用变量,它会崩溃并出现以下错误:
OpenQA.Selenium.StaleElementReferenceException:在缓存中找不到元素 - 自查询以来页面可能已更改
知道我做错了什么,我该怎么办?
答案 0 :(得分:0)
我的猜测是,当从body-element中查找项目时,您的路径无法从根目录开始。所以在断言中你应该有这个:
body.FindElement(By.XPath("./div[1]/div/div[3]/div[3]/div[1]/div/div[1]/div[1]/div[1]/div[1]/div")
起点是指你的身体元素。