首页 > 解决方案 > 如何在页面上获取元素,单击其他内容并等待原始元素消失

问题描述

我在 Windows 服务器上使用 Python 2.7、Robot Framework 和 Selenium2Library。

在带有按钮和数据文本框的页面上,我有一个单击按钮的 selenium 测试,这会触发获取请求,并在返回时重新创建数据文本框并使用新值进行更新。然后测试休眠 10 秒以允许这种情况发生,然后读取数据文本框中的值。

我真正想做的是获取数据文本框的元素,然后单击按钮并继续轮询原始数据文本引用以在 DOM 上变得不可用,即它已被重新创建,然后读取文本框以获取价值。

我一生都无法弄清楚如何使用 Robot Framework 和 Selenium2Library 来做到这一点,因为所有调用都是自包含的,并且不会将引用传回。

你能提供任何其他解决方案吗?

标签: python-2.7seleniumrobotframework

解决方案


SeleniumLibrary 有很多方法可以做到这一点,所有这些都围绕它的Wait Until关键字 -文档链接

选项一 - 元素是相同的,所以它的定位器不会改变;检查完成Wait Until Element Contains,并传递新文本:

Click Element    ${the_locator_for_the_button}
Wait Until Element Contains    ${the_locator_for_the_element}    your target text

选项二 - 如果单击时目标元素更改为不同的元素,例如定位器不同。然后你首先等待初始元素消失,然后新元素出现:

Click Element    ${the_locator_for_the_button}
Wait Until Element Is Not Visible    ${the_locator_for_the_initial_element}
Wait Until Element Is Visible    ${the_locator_for_the_new_element}

选项三 - 如果您不想处理定位器,但要确保 Selenium 看到它的实际元素消失,您可以使用 获取它Get Webelement,然后将该引用传递给Wait ...关键字 - 大多数(如果不是全部)SeleniumLibrary 支持定位器或实际网络元素:

Click Element    ${the_locator_for_the_button}
${webelement}=    Get Webelement    ${the_locator_for_the_initial_element}
Wait Until Element Is Not Visible    ${webelement}

关键字的好处Wait Until ...是它们不断地轮询 DOM 以获得预期的变化,并在第一次检测到满足条件时继续。例如,它不是硬编码的睡眠,它会在预定义的时间内暂停执行,而是在准备好后立即完成。

还要记住所有这些关键字都支持参数timeout=Xs,其中 X 是关键字等待满足条件的时间。


推荐阅读