如何使用Selenium Python测试使用React呈现的文本节点

时间:2015-09-17 11:51:04

标签: python selenium selenium-webdriver

我试图用一个元素测试有一些文字。该元素由React组件呈现。

测试代码如下所示:

el = self.browser.find_element_by_css_selector('.test')
txt = el.text
self.assertNotEqual("", txt, "No Text")

React组件在render方法中有类似的东西:

<td><span class=".test">TEST WORDS</span></td>

测试有时会通过,有时会失败。始终找到该元素(否则它将在该行上出错)。但有时元素有文字,有时候它没有。

我尝试使用componentDidMount在页面元素上设置一个类,并且我不会运行测试代码直到找到此元素 - 从而证明我只在Component渲染后运行测试。并且css_selector建立在我说的页面上的span元素。

在代码中加入time.sleep(1)会修复它。

所以结论是React认为它已经渲染了Component,但是文本还没有呈现到DOM中。 (测试在此部分发生之前运行)。我可以通过轮询元素一段时间来查看文本是否已呈现来解决此问题。

但我只是想知道我的理解是否正确并且这是一个已知问题?

2 个答案:

答案 0 :(得分:0)

我最后通过民意调查了以下内容:

browser.find_elements_by_css_selector(&#39; .testElement:否(:空)&#39)

一旦文本到达DOM,它给我1(它找到的元素)。

答案 1 :(得分:0)

看起来你找到了正确的CSS选择器,但我不知道你是如何“轮询”的,因为你没有提供使用的代码。你应该研究预期的条件。它是为了做这样的事情......等待某个条件成真。在这种情况下,您可能希望使用text_to_be_present_in_element

您可以找到更多信息和一些示例here以及许多其他地方。