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

C# 无法使用C通过XPath找到元素#,c#,html,selenium,xpath,visual-studio-2015,C#,Html,Selenium,Xpath,Visual Studio 2015,我正在尝试查找并单击以下元素: 但是,找不到该元素。问题是我能够在XPath测试仪中找到它,比如 我不知道问题出在哪里。感谢您的帮助 注意。要定位元素: <input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/> 您可

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



但是,找不到该元素。问题是我能够在XPath测试仪中找到它,比如

我不知道问题出在哪里。感谢您的帮助


注意。

要定位元素:

<input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/>
您可以更精细地使用属性
数据列a
值,该值设置为colausencidia,如下所示:

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();

问题似乎在于元素文本的显示方式:

正如你在这里看到的:


Ap_校友_0AñosA_1,Nb_校友_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(“,”)+”)))]/祖先::tr/td/input[@data columna='colausencidia'])。单击();

这样,代码将搜索只包含文本的
,直到


谢谢大家的支持。

为什么要编写如此复杂的xpath?这对我有用”//input[@data columna='colausencidia']”您好,@Pradeephebbar html代码只是一个大约40行的动态表的片段。由于表是动态的,如果没有
StaleElementException
,我无法以其他方式执行此操作,这就是为什么我使用nombreAlumno变量查找我要查找的行。您可以添加网页的url吗?找不到元素时会出现什么异常?它是否在IFRAME中?你试过添加等待吗?嗨@DebanjanB,我试过两种解决方案(甚至为
text()更改
只是为了确保,而且他们似乎都没有解决问题。谢谢您的输入。@elgato检查我的更新答案并让我知道状态。大家好@DebanjanB,我再次尝试了您的解决方案,对其进行了一些修改:WebDriverWait wait=new WebDriverWait(SeleniumHelper.GetWebDriver(),new TimeSpan(0,5,100));等待。直到(ExpectedConditions.ElementToBeClickable(By.XPath(//td/span[contains(,,“+nombreAlumno+”)]//following::td[2]/input”)).Click();SeleniumHelper.GetWebDriver().FindElement(By.XPath(//td/span[contains(text(),“+nombreAlumno+”)]//following::td[2]/input”)。Click();但是,
托管调试助手“ContextSwitchDeadlock”
执行失败,即使元素可见。@elgato好吧,我看不到
SeleniumHelper
类和
GetWebDriver
方法。请检查该方法是否存在死锁。否则,我们的代码是完美的。
<input type="checkbox" data-columna="colAusenciaDia" data-bind="attr: { 'data-AlumnoId': $data.AlumnoId }" data-alumnoid="9f900e5a-3325-4179-9c6f-a7bc008988c0"/>
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();
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();