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

Selenium,正在等待元素出现,但文本不可用

彭开畅
2023-03-14

在以下html" target="_blank">网站上:https://hepa.hu/hirek我正在等待这篇文章出现。这是javascript生成的,所以我开始在C#中使用Selenium。我编写了以下代码,以等待元素出现:

driver.Url = "https://hepa.hu/hirek";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("//body/app-root/app-base/section/div/app-news/section/div[2]/div[4]/a[1]/app-news-card/div/div[2]/h3")));

(Xpath是从节点本身复制的)代码是有效的,就它真正等待元素出现而言,但是当我尝试访问里面的文本(firstResult. Text)时,它只是给出“”,而不是里面的实际文本。文本在h3标签内。我也一直在使用HtmlAgilityPack,在那里,当我找到我需要的节点时,我可以使用InnerHtml标签访问里面的文本,但据我所知,Selenium中没有这样的东西。

另外需要注意的是,当我检查驱动程序的PageSource属性时,我可以看到里面的h3标记,也可以看到里面需要的文本。

有什么想法吗?提前谢谢。

共有2个答案

耿玄裳
2023-03-14

好的,我找到了一个非常全面的方法来解决这个问题。我想获取的文本的几个节点上是一个标记,带有指向文章的href链接,显然也有我需要的文本。我所做的就是找到了节点,得到了href属性,去了那个站点,找到了我需要的标记,出于某种原因,getText()在那里工作。不过,我不想关闭这个线程,因为原始问题仍然存在,我如何从原始节点获取文本?我很感兴趣为什么它不起作用。

曹鸿风
2023-03-14

我会加载页面,向下滚动1000像素,然后使用下面的xpath。向下滚动后,元素应该在那里。如果需要的话,请等待。

你可以这样称呼它:

        WaitForElemDisp_byXPath("//div[@class='news-cards']/a[1]//div[@class='news-card-text']/h3");

        public static bool WaitForElemDisp_byXPath(string path)
    {
        var result = true;
        try { _wait.Until(webDriver => webDriver.FindElement(By.XPath(path)).Displayed); }
        catch (StaleElementReferenceException) { WaitForElementDisplayed_byXPath(path); }
        catch (NoSuchElementException) { WaitForElementDisplayed_byXPath(path); }
        catch (WebDriverTimeoutException) { result = false; }
        return result;
    }

这将为您获取h3的文本。

var test =  driver.findelement(by.Xpath("//div[@class='news-cards']/a[1]//div[@class='news-card-text']/h3")).Text;
 类似资料:
  • 问题内容: 单击特定按钮时-我的测试站点将打开模式窗口。 但是模式窗口的打开是不同的 两者都有不同的标题,不同的选项和不同的位置。现在我应该等到模态。 是否可以等到任一模态窗口(WebElement)可见? 我已经在WebDriverWait方法中进行搜索,但是所有方法都必须等到特定WebElement可见或可单击为止。 我找不到更好的方法来等到任何一个都可见。 您能提出一种解决这种情况的方法吗?

  • 当我点击一个按钮时,它会显示一个带有另一个按钮的表单,我想点击其中一个。这是一个视频(非常短),请观看http://screencast.com/t/zyliSemW1s1 所以我点击“买票”按钮,简单如下: 然后我等待下一个按钮被点击。 我使用下一个代码: 之后,我点击我等待的按钮: 我得到错误:元素在这一点上是不可点击的。 据我所知,该方法预期的条件。ElementToBeClickable(

  • 问题内容: 我希望实现 c#中的函数,等待文本出现。但是,仅在Java中可用。有没有一种简单的方法可以在c#中实现这一点,等待文本出现在页面上? 问题答案: Selenium是开源的,因此请看一下它的作用: https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/u

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我将测试一个网络应用程序。在我的表中有一个按钮可以选择所有条目。我尝试过: selenium单击按钮,但什么也没发生。(还有send_Keys(Keys.Return))应用程序是用GXT开发的,我发现按钮后面有很多javascript。是否有可能等待事件加载器准备就绪?在单击之前等待可以解决问题,但不是自动测试的解决方案。

  • 问题内容: 等待和一起出现很方便。 问题是, 如果 找到元素的唯一可能方法 是 什么,因为它没有id,没有名称,没有唯一的类? 的构造函数仅接受作为参数,而不接受。 我已经设定了时间,所以使用它似乎不是一个好主意,因为我不想为这个元素等待那么长时间。 这是场景: 有一个网页,其中包含许多标签。每个标签都有格式要求。 当不满足格式要求时,动态标签将出现在该标签之后。 由于标签太多,因此我创建了一个通