最近,我用硒在网站上抓取了一些信息。我想做的只是点击“上个月的按钮”。
所以我写这样的代码
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)
我不知道为什么它不起作用.
请帮忙
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标记
另请参见下面的线程:
下面的线程显示了有关“找不到元素”的完整讨论: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中删除
根据上下文:
这
当您打算在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
您可以在以下位置找到一些关于无科学元素异常的相关讨论:
尝试使用,
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”的选项。 您也可以按索引或文本进行选择;请参阅