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

我正在尝试查找并单击以下元素:


<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


我不知道问题出在哪里。

慕虎7371278
浏览 209回答 2
2回答

www说

看来问题在于如何显示元素的文本:如您在这里看到的:<span&nbsp;data-bind="text:&nbsp;$data.Apellido1&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;$data.Apellido2&nbsp;+&nbsp;',&nbsp;'&nbsp;+&nbsp;$data.AlumnoNombre">Ap_Alumno_0AñosA_1&nbsp;&nbsp;,&nbsp;Nb_Alumno_0AñosA_1</span>范围的文本在逗号之前包含两个空格:&nbsp;Ap_Alumno_0AñosA_1 &nbsp;,但是,其中的文本只会出现一个空格&nbsp;Ap_Alumno_0AñosA_1 , Nb_Alumno_0AñosA_1这似乎是一个问题&nbsp;knockout.js无论如何,我通过更改驱动程序查找元素的方式来修复它:driver.FindElement(By.XPath("//td/span[contains(text(),&nbsp;'"&nbsp;+&nbsp;nombreAlumno.Substring(nombreAlumno.IndexOf(","))&nbsp;+&nbsp;"')]/ancestor::tr/td/input[@data-columna&nbsp;=&nbsp;'colAusenciaDia']")).Click();这样,代码将搜索<span>仅包含文本的“&nbsp;a”&nbsp;,直到,

阿波罗的战车

找到元素:<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();
打开App,查看更多内容
随时随地看视频慕课网APP