我正在自动化一个功能,用户需要单击以下链接中突出显示的链接。
.HTML
我尝试在 xpath 上包含一个包含,这是//*[@id="lc"]
,以及来自这里的 onclick 选项,这两个选项都不起作用,元素的错误不存在错误。
我知道我在正确的 iframe 中,因为当使用不包含的 xpath 时,脚本单击第一个 xpath 链接没有问题。
要click()
所需的元素,因为该元素是动态元素,您必须诱导 WebDriverWait 该元素可单击,并且您可以使用以下任一定位器策略:
-
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.EMROtherEpsEven>table tr>td.EMROtherEpsEven#lc[onclick*='Hemoglobin']"))).click()
-
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='EMROtherEpsEven']/table//tr/td[@class='EMROtherEpsEven' and @id='lc'][contains(@onclick, 'Hemoglobin')]"))).click()
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Python 中使用 Selenium,但我在 Java 中使用过,在 Java 中你必须使用简单的引号 (') 而不是双引号 ("),或者你可以只是一个更简单的定位器 id=lc 没有任何引号,如果你确定 ID 是正确的,这应该可以工作。
我已经在 Java 中完成了此操作,希望您找到答案 是的,在静态或动态表中,ID 将是相同的,但如果您尝试使用绝对 XPaAth,则 这是表元素的两个绝对路径,彼此驻留在第一行
/html[1]/body[1]/section[1]/section[1]/div[1]/data[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]
/html[1]/body[1]/section[1]/section[1]/div[1]/data[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]
这是相同元素的相对路径
//a[contains(text(),'AF17OT41603')]
//div[@id='1547533504703-0-uiGrid-000C-cell']//div[@class='ui-grid-cell-contents ng-binding ng-scope'][contains(text(),'AKSHAY PATIL')]
桌子