C#Selenium刷新所有状态元素

C#Selenium刷新所有状态元素,c#,.net,selenium,selenium-webdriver,C#,.net,Selenium,Selenium Webdriver,我使用的是“角度材质”选项卡,切换到其他选项卡(具有克隆栅格)后,我的所有元素都会过时。 有没有办法刷新页面上的所有元素,使我的引用不过时,而不是对网格上的所有20个元素执行此操作 我们正在努力获取网格上的值 private By JobIdHeaderGrid => By.XPath("//span[text() = 'Process ID']"); 简短的回答是否,没有办法自动刷新过时的元素。基本上,过时的元素是不再附加到DOM的元素。这可能有多种原因。。。页面

我使用的是“角度材质”选项卡,切换到其他选项卡(具有克隆栅格)后,我的所有元素都会过时。 有没有办法刷新页面上的所有元素,使我的引用不过时,而不是对网格上的所有20个元素执行此操作

我们正在努力获取网格上的值

private By JobIdHeaderGrid => By.XPath("//span[text() = 'Process ID']");


简短的回答是否,没有办法自动刷新过时的元素。基本上,过时的元素是不再附加到DOM的元素。这可能有多种原因。。。页面将重新加载,浏览器将从页面导航到其他位置,等等。在您的情况下,当您切换选项卡时,听起来就像页面更改一样,删除了所有引用

我建议不要存储引用,而是创建获取然后使用元素的方法,例如单击

public void ClickDate()
{
    driver.findElement(By.linkText(Utility.getSheetData(path, 7, 1, 2))).click();
}

那样的话,您应该去掉所有过时的元素,因为您没有获取它们,切换选项卡,然后再返回,然后单击存储的引用。您总是获取然后立即单击。

此行是否导致元素引用过期
date.click()?当我试图找到/获取元素@cruisepandeytry以使用selenium重新加载UI并查看其是否有效时,它变得过时了?这会起作用,但经理希望验证选项卡,而不重新加载@cruisepandeytry,您可以将两个选项卡中的一些元素以文本格式作为HTML发布吗?有一种方法,但您不会刷新过时的元素,您正在刷新对元素的引用。在本例中,前面的操作似乎导致DOM更新,这需要一点时间。因此它找到了元素,但在DOM仍在更新时发生单击时,该引用已损坏。将其放在一行中不会有任何帮助,您仍然需要获取引用,然后对其调用方法。您还需要一个webdriverwait来完成此任务。@p说到您的前几句话,您的描述与OP对正在发生的事情的描述不匹配。他说他得到了20份推荐信,点击了一个标签,然后所有的推荐信都过时了。。。这不是你所说的时间问题。剩下的我不知道你在说什么。。。你是说我的答案是对的/错的/其他的吗?我的代码可能导致过时元素的唯一方式是,如果在获取引用和单击元素之间的几毫秒内,它就过时了。。。有可能,但可能性很大。我的项目中都有这样的代码,我已经用了很多年了,没有这些问题。这取决于网站的工作方式。如果DOM是通过javascript更新的,则需要webdriverwait。。。。然而,这只会等到元素存在时。。。它不知道元素是否存在,但DOM仍在更新中。这就是创建Stale元素异常的原因。让您知道,以便重新获取元素。老实说,我没有仔细阅读他的帖子(我只是在看他发布的代码),但答案还是一样的。使用WebDriverWait/Expected Conditions并捕获仍在抛出的过时元素。。。或者非javascript更新站点的单击。如果单击不生成标准页面加载,而是生成一个JS操作,该操作会导致DOM更新,则需要webdriverwait,它将只等待该元素出现和/或满足预期条件所需的时间。
public void ClickDate()
{
    driver.findElement(By.linkText(Utility.getSheetData(path, 7, 1, 2))).click();
}