我正在尝试使用Selenium查找元素,但没有得到。遵循HTML代码:
<div aria-disabled="false"
data-tb-test-id="DownloadCrosstab-Button"
role="button"
tabindex="0"
style="font-size: 12px; font-weight: normal; color: rgba(0, 0, 0, 0.7); display: inline-block; padding: 0px 24px; position: relative; text-align: center; border-style: solid; border-width: 1px; border-radius: 1px; height: 24px; line-height: 22px; min-width: 90px; box-sizing: border-box; outline: none; white-space: nowrap; user-select: none; cursor: default; background-color: rgba(0, 0, 0, 0); border-color: rgb(203, 203, 203); margin-top: 8px; width: 100%; -webkit-tap-highlight-color: transparent;"
>Tabela de referência cruzada</div>
我尝试了以下代码:
x = browser.find_element_by_id("Downloadcrosstab")
x = browser.find_element_by_link_text("Downloadcrosstab-Button")
x = browser.find_element_by_class_name('Crosstab')
但是我遇到了同样的错误:
NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".Crosstab"}
(Session info: chrome=75.0.3770.142)
答案 0 :(得分:2)
我实际上想为我的测试定位器添加一个自定义html属性。
然后您可以使用xpath来定位它们,例如//*[@data-tb-test-id="DownloadCrosstab-Button"]
答案 1 :(得分:1)
该元素似乎是一个动态元素,并且要标识您需要诱使 WebDriverWait 以便使所需元素可点击的元素,您可以使用以下任一方法解决方案:
使用CSS_SELECTOR
:
x = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-tb-test-id='DownloadCrosstab-Button'][role='button']"))).click()
使用XPATH
:
x = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@data-tb-test-id='DownloadCrosstab-Button' and text()='Tabela de referência cruzada']")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
注意:您可以在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome
中找到相关的讨论
答案 2 :(得分:0)
使用CSS选择器,尤其是属性选择器,如下所示:
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
.gql
这应该选择一个x = browser.find_element_by_css_selector('[data-tb-test-id="DownloadCrosstab-Button"]')
设置为data-tb-test-id
的项目。如果该元素不是唯一的,它将为您提供第一个匹配项,因此在这种情况下,您需要一个更具体的选择器