有没有办法在 while 语句中实现 selenium 等待?

我正在编写一个不断循环的脚本,当它检测到页面上的某个元素中有文本时需要停止。我在 selenium python 文档中找不到任何关于执行此操作的帮助,但一定有办法。如果您仍然不明白我需要做什么,这里有一些代码:


While #element is not visible:

   #do stuff

#when element is visible break out of statement and do something else

编辑:我知道我正在寻找的元素的确切文本和确切的 xpath。然而,我只是在寻找一般性的答复,所以我不介意缺乏细节的答案。


qq_笑_17
浏览 49回答 4
4回答

狐的传说

要继续循环并在Selenium检测到页面上某个元素中有文本时停止,您可以使用以下定位器策略:while True:    try:        WebDriverWait(driver, 5).until(EC.invisibility_of_element((By.XPATH, "element_xpath")))        #do stuff        continue    except:        break#do something else

白猪掌柜的

您可以尝试text_to_be_present_in_element预期的条件并实现ExplicitWait,如下所示:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get(URL)timeout = <SET MAXIMUM AMOUNT OF TIME IN SECONDS TO WAIT> your_text = '<REQUIRED TEXT>'element = WebDriverWait(driver, timeout).until(EC.text_to_be_present_in_element((By.ID, "<ElementID>"), your_text))一旦出现所需的文本,这将返回元素

动漫人物

下面的代码将获取所需的元素,然后循环直到它显示(可见)。在循环结束时,您可能需要重新获取元素(以防页面更改),然后再检查它是否显示在循环顶部。element = driver.find_element_by_XXX(locator)while not element.is_displayed():&nbsp; &nbsp; #do stuff&nbsp; &nbsp; element = driver.find_element_by_XXX(locator)#when element is visible break out of statement and do something else我还要补充一点,您可能希望有一个循环转义,以防元素永远不可见。为此,您可以在进入循环之前获取当前时间,然后检查条件while以确保自开始时间以来时间不超过 30 秒。这样你的脚本就不会陷入无限循环。

莫回无

我正在 C# 中为 Selenium 进行编码,但从未在 while 循环中实际使用过它,但我使用隐式等待来使我的测试等待,直到我正在寻找的元素可用。该函数很容易编写,但我不确定这是否适合您。_&nbsp;=&nbsp;driver.Manage().Timeouts().ImplicitWait&nbsp;=&nbsp;TimeSpan.FromSeconds(30);基本上,Selenium 会等待元素可用或总共 30 秒,如果元素不可用,则测试失败。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python