在python中找不到文本的xpath元素

2024-09-26 17:43:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过调用python方法为自动化测试编写robot。在python中,我使用xpath查找python中的文本“Branch TH1”。 这是参考,

str_name = 'Branch TH1'
text_element = self.driver.find_element(*AdminAccountsLocators.FILTROS_TABLE)
FILTROS_TABLE = (By.ID, 'ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFilters')

这是我的剧本

path = ("//*[contains(text(),'%s')]/../input/.." %str_name)
WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((path)))
selected_element = text_element.find_element_by_xpath(path)

这是我要测试的web代码

<div id="ctl00_ContentPlaceHolder_tcUser_tpFilter" class="ajax__tab_panel" style="visibility: visible;"> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_upEditViewFilters"> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_pFilterTabContent" style="height:350px;width:570px;"> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_pScopesControl"> <table style="width: 500px"> <tbody><tr> <td align="right"> <span id="ctl00_ContentPlaceHolder_tcUser_tpFilter_lblApplication">Aplicación:</span> </td> <td align="left"> <select name="ctl00$ContentPlaceHolder$tcUser$tpFilter$ddlApplication" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder$tcUser$tpFilter$ddlApplication\',\'\')', 0)" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_ddlApplication"> <option selected="selected" value="2">Aplicacion caja registradora.</option> <option value="4">Aplicacion de Dashboard para Transactional Switch</option> <option value="3">Aplicacion de partner portal.</option> <option value="6">Aplicacion Prueba Symetric</option> <option value="1">Aplicacion web central.</option> <option value="5">Aplicación WebTeller</option> </select> </td> </tr> <tr> <td align="right"> <span id="ctl00_ContentPlaceHolder_tcUser_tpFilter_lblScope">Alcance:</span> </td> <td align="left"> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_upEditViewFiltersScopes"> <select name="ctl00$ContentPlaceHolder$tcUser$tpFilter$ddlScope" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder$tcUser$tpFilter$ddlScope\',\'\')', 0)" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_ddlScope"> <option value="6">Instancia de Aplicación</option> <option selected="selected" value="4">Agencia</option> <option value="5">Caja</option> <option value="3">Cadena</option> <option value="1">Operación</option> <option value="2">Proveedor</option> <option value="7">DES scope de prueba 2</option> </select> </div> </td> </tr> </tbody></table> </div> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_pScopesChecks" style="text-align:left;"> <table border="0" style="border-collapse: collapse; height: 25px; width: 100%;"> <tbody><tr> <td align="left"> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_upEditViewFiltersFilterEnabledControls"> <input id="ctl00_ContentPlaceHolder_tcUser_tpFilter_rbScopeFilterEnabled" type="radio" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$rbScopeFilterStatus" value="rbScopeFilterEnabled" checked="checked"><label for="ctl00_ContentPlaceHolder_tcUser_tpFilter_rbScopeFilterEnabled">Habilitar</label> <input id="ctl00_ContentPlaceHolder_tcUser_tpFilter_rbScopeFilterDisabled" type="radio" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$rbScopeFilterStatus" value="rbScopeFilterDisabled" onclick="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder$tcUser$tpFilter$rbScopeFilterDisabled\',\'\')', 0)"><label for="ctl00_ContentPlaceHolder_tcUser_tpFilter_rbScopeFilterDisabled">Inhabilitar</label> </div> </td> <td align="right"> <input name="ctl00$ContentPlaceHolder$tcUser$tpFilter$txtScopeSearch" type="text" id="txtScopeSearch" maxlength="50" style="width: 200px;" onkeyup="window.ManageUser.EditView.eventHandlers.txtScopeSearch_OnKeyPress(this, event)" onkeydown="window.ManageUser.EditView.eventHandlers.txtScopeSearch_OnKeyPress(this, event)" value="Branch TH1"> <input type="submit" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$btnScopeSearch" value="Buscar" id="btnScopeSearch" style="width:60px;"> </td> </tr> </tbody></table> <div id="ctl00_ContentPlaceHolder_tcUser_tpFilter_upEditViewFiltersFilterList"> <table border="0" style="border-collapse: collapse; height: 310px; width: 100%;"> <tbody><tr> <td colspan="2"> <div style="height: 285px; overflow-y: scroll;"> <table id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFilters" style="font-size:XX-Small;"> <tbody><tr> <td><input id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFilters_0" type="checkbox" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFilters$0" onclick="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFilters$0\',\'\')', 0)" value="8121"><label for="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFilters_0">Branch TH1</label></td><td></td> </tr> </tbody></table> </div> </td> </tr> <tr style="height: 24px;"> <td colspan="2"> <table align="center" width="350px"> <tbody><tr> <td align="left" style="width: 50px;"> <input type="image" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFiltersPager$lbtFirst" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFiltersPager_lbtFirst" disabled="disabled" class="aspNetDisabled" src="../Images/first2.png"> </td> <td align="left" style="width: 50px;"> <input type="image" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFiltersPager$lbtPrevious" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFiltersPager_lbtPrevious" disabled="disabled" class="aspNetDisabled" src="../Images/previous2.png"> </td> <td align="center" style="width: 150px;"> <span id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFiltersPager_lblPageCounter">Page 1/1</span> </td> <td align="right" style="width: 50px;"> <input type="image" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFiltersPager$lbtNext" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFiltersPager_lbtNext" disabled="disabled" class="aspNetDisabled" src="../Images/next2.png"> </td> <td align="right" style="width: 50px;"> <input type="image" name="ctl00$ContentPlaceHolder$tcUser$tpFilter$cblScopeFiltersPager$lbtLast" id="ctl00_ContentPlaceHolder_tcUser_tpFilter_cblScopeFiltersPager_lbtLast" disabled="disabled" class="aspNetDisabled" src="../Images/last2.png"> </td> </tr> </tbody></table> </td> </tr> </tbody></table> </div> </div> </div> </div> </div>

This is when I find the xpath manually 您将看到,我可以手动查找元素“/*[contains(text(),'Branch TH1')]/../input/。”在红色框中找到的1of1高亮显示,但它不会在代码行中高亮显示(不确定这是否是点)

运行it后,它向我抛出了一个错误: TypeError:find_element()接受1到3个位置参数,但给出了38个

我不确定运行robot时是否有任何东西阻止了我想要找到的xpath。请帮忙


Tags: namedividinputvaluestylewidthtr
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:59

您的XPath表达式:

//*[contains(text(),'%s')]/../input/..

将找到一个td元素。如果要单击包含特定文本的复选框,则应以input元素为目标。感兴趣的领域可能是:

//input[following-sibling::label[.="Branch TH1"]]

因此,您可以使用以下内容:

name = 'Branch TH1'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[following-sibling::label[.='%s']]"% str(name)))).click()

进口:

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

编辑:如果需要查找特定文本以验证元素的存在,请使用:

name = 'Branch TH1'
print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(),'%s')]"% str(name)))))

相关问题 更多 >

    热门问题