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