4 回答
TA贡献1804条经验 获得超3个赞
要继续循环并在Selenium检测到页面上某个元素中有文本时停止,您可以使用以下定位器策略:
while True:
try:
WebDriverWait(driver, 5).until(EC.invisibility_of_element((By.XPATH, "element_xpath")))
#do stuff
continue
except:
break
#do something else
TA贡献1893条经验 获得超10个赞
您可以尝试text_to_be_present_in_element
预期的条件并实现ExplicitWait,如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = 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))
一旦出现所需的文本,这将返回元素
TA贡献1815条经验 获得超10个赞
下面的代码将获取所需的元素,然后循环直到它显示(可见)。在循环结束时,您可能需要重新获取元素(以防页面更改),然后再检查它是否显示在循环顶部。
element = driver.find_element_by_XXX(locator)
while not element.is_displayed():
#do stuff
element = driver.find_element_by_XXX(locator)
#when element is visible break out of statement and do something else
我还要补充一点,您可能希望有一个循环转义,以防元素永远不可见。为此,您可以在进入循环之前获取当前时间,然后检查条件while以确保自开始时间以来时间不超过 30 秒。这样你的脚本就不会陷入无限循环。
TA贡献1865条经验 获得超7个赞
我正在 C# 中为 Selenium 进行编码,但从未在 while 循环中实际使用过它,但我使用隐式等待来使我的测试等待,直到我正在寻找的元素可用。该函数很容易编写,但我不确定这是否适合您。
_ = driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
基本上,Selenium 会等待元素可用或总共 30 秒,如果元素不可用,则测试失败。
添加回答
举报