首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用selenium python验证在UI中显示的标签(仅显示5秒),并在页面加载出现错误时出现?

如何使用selenium python验证在UI中显示的标签(仅显示5秒),并在页面加载出现错误时出现?
EN

Stack Overflow用户
提问于 2021-03-09 02:24:39
回答 1查看 23关注 0票数 0

如果我加载一个页面,页面中有一些错误,会有一条消息出现5到10秒,消息是“更新数据时出错”。如何在页面加载时检查此错误是否存在?开发人员给了我这个标签的id,它以span开头。

我希望使用selenium和python检查页面加载时是否出现此标签。基本上是在加载时检查页面中是否有任何错误。我们大约有20到30个页面,所以必须检查每个页面是否加载没有任何错误

Error updating data

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 04:51:38

如果您想要检查多个页面,这实际上取决于您尝试检查的页面列表的类型。

如果它是一个页面列表,比如"https://qwant.com“,然后是"https://duckduckgo.com”,那么您可能希望在一个循环中遍历它们,每个迭代都有一个惟一的.get请求。在这种情况下,这取决于您如何存储链接列表。如果它是在一个简单的列表中,你可以很容易地为列表中的每个url使用.get。假设您在"urls“列表中存储了一个链接列表。所以:

代码语言:javascript
运行
复制
# Your urls list
urls = ["https://qwant.com", "https://duckduckgo.com", "https://startpage.com"]

然后使用for循环遍历列表中的每个链接:

代码语言:javascript
运行
复制
for url in urls:
    driver.get(url)
    # Do the actions that you need here

现在来检查消息id。您还没有提供ID,所以我不确定ID是简单的ID,还是XPath。但是,您可以同时使用这两种方法,这取决于您拥有哪种方法。我们当然希望等待消息是否会在页面上弹出。但是,重要的是要注意,如果消息没有出现,您将获得TimeoutException,并且您的程序将被终止。为了防止出现这种情况,您需要使用try和except来查看消息是否出现。

要做到这一点,您首先需要引入一个WebDriverWait,其中指定了Selenium在查找元素之前应该等待多长时间。我们可以这样定义WebDriverWait:

代码语言:javascript
运行
复制
wait = WebDriverWait(driver, 20)

在本例中,"driver“是您在上面的代码中定义的WebDriver的名称。

然后,您可能希望等待元素出现。您将使用新的等待方法来等待它出现。在使用简单ID的情况下,您将执行以下操作:

代码语言:javascript
运行
复制
wait.until(ec.presence_of_element_located((By.ID, "element-id")))

您已经提到ID包含span,这使我相信您可能已经获得了XPath标识符。如果是这种情况,只需修改代码以搜索具有该ID的XPath:

代码语言:javascript
运行
复制
wait.until(ec.presence_of_element_located((By.XPATH, "//span[@id="element-id"]")))

但是,如果错误框中的文本是唯一的,并且您不确定ID,则还可以搜索错误本身的文本:

代码语言:javascript
运行
复制
wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))

现在,正如我在开始时提到的,由于您应该检查是否存在错误,因此预计有时可能不存在。为了防止TimeoutException的发生,您可能希望将代码包装在一个try/except语句中,以检查它是否实际存在,如果不存在,则跳过它。所以你会做类似这样的事情:

代码语言:javascript
运行
复制
try:
    wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))
except TimeoutException:
    pass

尽管要注意这一点很重要,但您的项目需要像这样导入Selenium异常库:

代码语言:javascript
运行
复制
from selenium.common.exceptions import WebDriverException, TimeoutException

这同样适用于我们在开始时使用的WebDriverWait,即:

代码语言:javascript
运行
复制
from selenium.webdriver.support.ui import WebDriverWait

所有这些都表明,您的最终代码可能如下所示:

代码语言:javascript
运行
复制
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
from selenium.common.exceptions import TimeoutException

# Define WebDriver and WebDriverWait here
driver = webdriver.Firefox(executable_path="/geckdriver")
wait = WebDriverWait(driver, 20)

# Your urls list
urls = ["https://qwant.com", "https://duckduckgo.com", "https://startpage.com"]

# Iterate through every page in the urls list
for url in urls:
    driver.get(url)
    try:
    wait.until(ec.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Error updating data')]")))
    print(f"Error code found on page {url}")

except TimeoutException:
    pass
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66535170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档