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

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

赫连明诚
2023-03-14

我通过调用python方法来编写自动化测试的机器人。在python中,我使用xpath在python中找到文本“分支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)

这是我想测试的网络代码,

<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>

这是当我手动找到xpath时,你会看到我可以手动找到元素“//*[包含(文本(),'分支TH1')]/.../输入/...”作为1of1在红框高亮显示,但它不会在代码行高亮显示(不确定这是否是重点)。

在我运行it之后,它抛给我一个错误:TypeError:find_element()从1到3个位置参数,但有38个给出

我不确定运行机器人时是否有什么东西挡住了我想找到的x路径。请帮忙。

共有1个答案

曹钊
2023-03-14

您的XPath表达式:

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

将找到一个td元素。如果要单击包含特定文本的复选框,则应针对输入元素。有趣的是:

//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)))))
 类似资料:
  • 我正在尝试使用python selenium脚本单击gmail主页右上角的“登录”标签。我使用firebug/firepath为这个类找到了正确的xpath,在使用浏览器工具时,它似乎工作得很好,但当脚本尝试使用xpath查找相同的元素时,它失败了。如果你能给我指出正确的方向,我将不胜感激。非常感谢。 Url:https://www.google.com/gmail/about/ 附言:我对硒比较

  • Selenium.Common.Exceptions.NosuChelementException:消息:没有这样的元素:找不到元素:

  • 问题内容: 我有以下XPath: 当我在XPath Checker(Firefox扩展)中试用此XPath时,它一直都能完美运行。但是当我在Selenium中执行以下操作时: 它不断给我以下日志错误: 我为解决这个问题而疯狂。有人看到我的代码行有任何错误吗? 问题答案: 该查询字符串不应该像这样(根据javadoc api)吗?

  • 本文向大家介绍Python在BeautifulSoup中的元素后找到文本,包括了Python在BeautifulSoup中的元素后找到文本的使用技巧和注意事项,需要的朋友参考一下 示例 假设您有以下HTML: 并且您需要在label元素之后找到文本“ John Smith” 。 在这种情况下,您可以label按文本查找元素,然后使用.next_sibling属性: 印刷品John Smith。

  • 我是新来的。如果问题重复,很抱歉,但我没有找到解决方法。 我有一个问题--我无法使用Xpath定位元素,但我使用ID定位器定位它没有问题。见附件截图。这一问题不仅针对这一要素,而且也针对所有要素。看来Xpath根本不起作用。 我正在使用Appium 7.3.0(试用过不同版本),UIAutomator2,方法是在模拟器上设置,Android 8.1功能。 null 此外,我在需要的地方使用了和,因

  • 问题内容: 我正在尝试编写Selenium测试用例,并从Firefox中的Selenium IDE开始。那里的测试工作很好。现在,我想使用Selenium Webdriver自动化该测试,并导出相应的JAVA类。到目前为止,一切都已设置并且运行良好(Internet Explorer窗口正在打开,显示相应的页面)。 但是:Selenium Webdriver找不到元素。我想获得以下元素: 而且我有