当前位置: 首页 > 知识库问答 >
问题:

如何点击这个HTML元素在蟒蛇(硒)

傅元章
2023-03-14

最近,我用硒在网站上抓取了一些信息。我想做的只是点击“上个月的按钮”。

所以我写这样的代码

webDriver.find_element_by_css_selector('span.ui-icon ui-icon-circle-triangle-w').click()

但它不起作用,我改变了很多次,像这样改变代码

webDriver.find_element_by_css_selector('a.ui-icon ui-icon-circle-triangle-w').click()
webDriver.find_element_by_css_selector('ui-icon ui-icon-circle-triangle-w').click()
webDriver.find_element_by_class_name('ui-icon ui-icon-circle-triangle-w').click()

这些都不管用。当我尝试使用三个试用版中的第一个时(即:web driver . find _ element _ by _ CSS _ selector(' a . ui-icon ui-icon-circle-triangle-w ')。单击()),弹出的错误是这样的

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"a.ui-icon ui-icon-circle-triangle-w"}
 (Session info: chrome=86.0.4240.198)

我不知道为什么它不起作用.

请帮忙

共有3个答案

鄢英哲
2023-03-14
webDriver.find_element_by_css_selector('span.ui-icon ui-icon-circle-triangle-w')

将查找span标记的子元素,并且具有类“ui-icon-circle-triangle-w”

如果您想检查具有类“ui图标ui-icon-circle-triangle-w”的span标记

您必须在css中使用“.”来引用多个类。由于 html 类中的空格表示类的结束,因此 ui 图标和 ui 图标圆角 w 是两个不同的类

相等定位器是:

webDriver.find_element_by_css_selector('span.ui-icon.ui-icon-circle-triangle-w')

表示具有类“ui图标”和“ui-icon-circle-triangle-w”的span标记

  1. 在css中,定位器空间等于xpath中的“/”
  2. CSS中的定位器

另请参见下面的线程:

下面的线程显示了有关“找不到元素”的完整讨论:https://sqa.stackexchange.com/q/41860/40022

总结是:

1. 相信您的代码并怀疑 SUT(正在测试的软件):

如果一切正常,测试突然开始失败。不要为问题调试代码,而是从检查实际产品开始。进行一些目视检查,看看开发团队是否修改了元素,或者元素不再显示。

2. 信任你的代码并怀疑环境:

如果本地一切正常,并且在集成到CI/CD后立即失败。然后调查测试服务器中的产品行为。主要是由于操作系统和配置差异,产品无法像在本地那样工作(引发错误)

3.现在怀疑你的脚本(使用绝对XPATH):

您可能使用的是绝对 XPATH,这会导致在 DOM 结构更改时进行片状测试。使用相对 XPATH(更建议使用 CSS)。如果您有唯一的 ID/名称来标识元素,则永远不要使用 xpath/。

4.现在怀疑您的脚本(不使用显式等待):

有时脚本缺少显式的等待并尝试与动态元素交互,这会导致测试失败,因为它试图在元素在DOM中可用之前与元素交互。

5.现在怀疑您的脚本(处理微调器):

有时微调器需要一些时间才能显示出来。因此,如果您只是检查不可见情况,那么它将返回true,并尝试在实际微调器事件完成之前与下一个元素进行交互

因此,首先检查微调器的可见性,然后在与其他动态元素交互之前检查不可见性。

6.现在怀疑你的脚本(不处理iFrames):

有时元素会在iframe中,脚本在与这些元素交互之前不会在帧之间切换。

检查 任何父元素是否包含标签框架或 iframe,以确定元素是否位于 iframe 内

7.现在怀疑你的脚本(没有禁用等待角):

有时,产品使用微调器来等待html" target="_blank">异步操作在后台完成。例如,单击“登录”,然后会出现微调器,并且在后台任务未完成之前不会消失。

在这种情况下,确保在与临时覆盖中的元素交互之前,没有等待异步操作完成(例如,在量角器中将waitforangular标志设置为true)。

这是因为,如果将waitforangular设置为true,则脚本将等待所有任务完成,然后临时覆盖(例如微调器)将从DOM中删除

邵研
2023-03-14

根据上下文:

当您打算在xpath中使用此类属性值时,您可以将其保留如下:

//span[@class='ui-icon ui-icon-circle-triangle-w']

当您打算在css选择器中使用该类属性值时,需要通过点<code>(.)

span.ui-icon.ui-icon-circle-triangle-w

理想情况下,要单击元素,您需要为< code > element _ to _ be _ clickable()引入WebDriverWait,并且您可以使用以下定位器策略之一:

>

  • 使用CSS_SELECTOR

    WebDriverWait(webDriver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.ui-icon.ui-icon-circle-triangle-w"))).click()
    

    使用 XPATH

    WebDriverWait(webDriver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='ui-icon ui-icon-circle-triangle-w']"))).click()
    

    注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    您可以在以下位置找到一些关于无科学元素异常的相关讨论:

    • selenium.common.exceptions。NoTouchElementException:消息:没有这样的元素:尝试使用selenium单击下一步按钮时无法定位元素。
    • python中的selenium:NoTouchElementException:Message:没有这样的元素:无法定位元素

  • 仲孙文乐
    2023-03-14

    尝试使用,

    webDriver.find_element_by_class_name("ui-icon.ui-icon-circle-triangle-w").click()
    

    每当你在HTML代码中看到空格,你应该加上“.”而不是用硒写字时的空格。此外,不要写类名,只需复制粘贴并用“.”替换空格这是容易得多,并消除捆绑错误。

     类似资料:
    • 我目前正在处理一个自动填写表格的项目。当表单填写时,下一个按钮会出现,这就是为什么它给我一个错误。 我试过: HTML: 错误: selenium.common.exceptions.ElementClickInterceptedException:消息:元素点击被拦截:元素在点(203,530)不可点击。其他元素将收到点击:...(会话信息:chrome=76.0.3809.132)

    • 我尝试使用xpath和classname来定位并单击按钮。然而,什么都不管用。 driver.find_element(By.XPATH,“//button[@class='sc-cqCuEk ffSPoi MuiButtonBase root sc dliRfk hLpdQI MuiAccordionSummary root Mui展开的MuiAccountionSummarygutters s

    • 我正在尝试点击图中所示的下拉菜单 这就是我尝试过的 但它给了我这个错误 NoSuchElementException: Message:找不到element://div[@ class = ' choosed-container choosed-container-single ']//a[@ class = ' choosed-single choosed-single-with-deselec

    • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

    • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

    • 问题内容: 这是一段UI代码 当标签被嵌套在里面的标签。我需要在下拉列表中的第二个元素上。当我尝试使用id / uniqueattr 在标签上时,可单击下拉列表。 如何遍历嵌套在下面的标签并单击正确的项目? 问题答案: 这将在ID为“ order_unit_line_rate_806782_is_addenda_enabled”的选择中选择值为“ 1”的选项。 您也可以按索引或文本进行选择;请参阅