【问题标题】:Is there a way to refresh a page until an element on the screen exists? Only the class is provided有没有办法刷新页面直到屏幕上的元素存在?只提供类
【发布时间】:2020-02-01 07:04:31
【问题描述】:

我正在使用 C# 和 Selenium 进行浏览器自动化,并希望刷新页面,直到存在与给定字符串匹配的元素。我该怎么做?

<a class="name-link" href="/shop/sweatshirts/tymdtrivq/wbisud8yv">Breed Crewneck</a>

这就是元素的外观。我希望刷新页面,直到页面上存在文本“Breed Crewneck”(当然,然后单击该项目)。但是,我无法访问名称、ID 或链接文本。此外,我不能使用 XPath,因为它与关键字“Breed Crewneck”无关。我相信有一个通过实现 JavaScript 的解决方案,但我还没有走得太远。

编辑 - 上一页。由于误解,编辑被删除。道歉。

编辑 2

bool elementFound = false;

            do
            {
                driver.Navigate().Refresh();
                try
                {
                    driver.FindElement(By.LinkText("Breed Crewneck"));
                    elementFound = true;
                }catch(NoSuchElementException error)
                {
                    Console.WriteLine("No such element found!");
                }
            } while (elementFound == false);

上面的代码似乎可以工作。干杯!

【问题讨论】:

  • href 是否与Breed Crewneck 有关系?哦,是的,javascript 可能是前进的方向
  • 不。不幸的是,“tymdtrivq/wbisud8yv”是无关的。我想我需要找到一种在 C# 中实现 JavaScript 函数的方法。
  • 哦,在 C# 中,不,那么 javascript 不是前进的方向
  • 啊,好的,有没有办法只通过 C# 来解决这个问题?

标签: javascript c# selenium selenium-chromedriver


【解决方案1】:

这里有一些 C# 代码用于刷新页面,直到元素包含您要查找的文本。

var wait = new WebDriverWait(Driver, 10000);

while (driver.FindElement(By.XPath("//a[@class=‘name-link’]")).Text != “Breed Crewneck”)
{

    driver.Navigate().Refresh();
    wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(“//a[@class=‘name-link’]”)));
}

【讨论】:

  • 您好,感谢您的建议!刷新工作完美,但尽管元素存在,浏览器会不断重新加载。我在 wait.Until 行周围添加了一个 try/catch 块;它捕获 NullReferenceExceptions。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2015-03-24
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多