为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用C#通过XPath查找元素

无法使用C#通过XPath查找元素

C#
慕虎7371278 2021-04-02 22:10:53
我正在尝试查找并单击以下元素:<input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/>在此代码内:<?xml version="1.0" encoding="UTF-8"?><tr data-bind="attr: { Id: $data.AlumnoId }" id="9f900e5a-3325-4179-9c6f-a7bc008988c0" class="">   <td class="bkgAzul text-center" style="color: #fff; width: 20px;">     <span data-bind="text: $root.ObtenerContador()">1</span>   </td>    <td width="190px">     <span data-bind="text: $data.Apellido1 + ' ' + $data.Apellido2 + ', ' + $data.AlumnoNombre">Ap_Alumno_0AñosA_1 , Nb_Alumno_0AñosA_1</span>   </td>    <td class="text-center" colspan="1" width="40px">     <!-- ko if: ($data.DiaJustificado &&  $data.DiaJustificadoMismaPersona) || $data.IncidenciaDiaria  -->      <!-- /ko -->      <!-- ko if: $data.DiaJustificado &&  $data.DiaJustificadoMismaPersona == false && $data.IncidenciaDiaria==false  -->      <!-- /ko -->      <!-- ko if: $data.DiaJustificado == false && $data.IncidenciaDiaria == false -->      <input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/>      <!-- /ko -->   </td>        <!-- ko if: $data.DiaJustificado == false && $data.IncidenciaDiaria == true -->      <!-- /ko -->   </td>    <!-- /ko --> </tr>为此,我正在使用以下代码:// where nombreAlumno is "Ap_Alumno_0AñosA_1 , Nb_Alumno_0AñosA_1"driver.FindElement(By.XPath("//td/span[contains(text(), '" + nombreAlumno + "')]/ancestor::tr/td/input[@data-columna = 'colAusenciaDia']")).Click();但是,找不到该元素。问题是我可以在XPath测试器中找到它,例如http://www.xpathtester.com/xpath我不知道问题出在哪里。
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

看来问题在于如何显示元素的文本:

如您在这里看到的:


<span data-bind="text: $data.Apellido1 + ' ' + $data.Apellido2 + ', ' + $data.AlumnoNombre">Ap_Alumno_0AñosA_1  , Nb_Alumno_0AñosA_1</span>

范围的文本在逗号之前包含两个空格: Ap_Alumno_0AñosA_1  ,

但是,其中的文本只会出现一个空格 Ap_Alumno_0AñosA_1 , Nb_Alumno_0AñosA_1

这似乎是一个问题 knockout.js

无论如何,我通过更改驱动程序查找元素的方式来修复它:


driver.FindElement(By.XPath("//td/span[contains(text(), '" + nombreAlumno.Substring(nombreAlumno.IndexOf(",")) + "')]/ancestor::tr/td/input[@data-columna = 'colAusenciaDia']")).Click();

这样,代码将搜索<span>仅包含文本的“ a” ,直到,


查看完整回答
反对 回复 2021-04-10
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

找到元素:


<input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/>

并调用click()您可以使用以下代码行:


WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,5,100));

IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//td/span[contains(., '" + nombreAlumno + "')]//following::td[2]/input"))).Click();

您可以更细化并使用data-columna设置为colAusenciaDia的属性值,如下所示:


WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,5,100));

IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//td/span[contains(., '" + nombreAlumno + "')]//following::td/input[@data-columna='colAusenciaDia']"))).Click();


查看完整回答
反对 回复 2021-04-10
  • 2 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信