在 xpath 中传递 Datatable 项并收到错误“javascript 错误:参数 [0].scrollIntoView 不是函数”
Posted
技术标签:
【中文标题】在 xpath 中传递 Datatable 项并收到错误“javascript 错误:参数 [0].scrollIntoView 不是函数”【英文标题】:Passing Datatable item in xpath and getting error "javascript error: arguments[0].scrollIntoView is not a function" 【发布时间】:2021-11-16 21:31:29 【问题描述】:您好,我是 c# 和 specflow 的新手。
我有一个带有 1 个数据表的场景大纲
Examples:
| Name | ID | Attendence| Date |
| Shan | 1003 - Shan | FT | 10/22/2021 |
| Sam | ZYZ | FT | 10/22/2021 |
以上是我的代码(页面)
IList<IWebElement> AllList = new List<IWebElement>(driver.FindElements(By.XPath("//*[@id='Myul']/li"))); //get all elements in the list
var path = driver.FindElement(By.XPath("//span[contains(text(),'" + ID + "')]"));
IjavascriptExecutor je = (IJavaScriptExecutor)driver;
je.ExecuteScript("arguments[0].scrollIntoView(false);", AllList.Contains(path));
Thread.Sleep(2000);
if (path.Displayed)
path.Click();
我正在尝试将我在功能文件中设置的 ID 传递到 xpath,但我收到以下错误:
OpenQA.Selenium.WebDriverException: 'javascript 错误:arguments[0].scrollIntoView 不是函数
【问题讨论】:
【参考方案1】:AllList.Contains(path)
返回一个布尔值。这是调用 arguments[0].scrollIntoView(false);
的上下文,这意味着 JavaScript 正在尝试对一个真/假值而不是 htmlElement 对象执行 scrollIntoView(false);
。
AllList.Contains(path)
方法只是测试path
是否是AllList
集合中的项目之一。你想要完成的事情并不完全有意义。你可能只需要通过path
:
je.ExecuteScript("arguments[0].scrollIntoView(false);", path);
由于path
在 C# 中是 IWebElement
,因此 JavaScript 会将其解释为 HTMLElement 对象,该对象指向您的 IWebElement 在 C# 中引用的同一 HTML 标记。这是调用arguments[0].scrollIntoView(false);
的上下文,它执行HTMLElement.scrollIntoView(boolean)。我相信这是您尝试调用的 JavaScript 方法。
【讨论】:
感谢您的详细解释,它非常有帮助,现在正在运行。确实,我只是想找到路径。以上是关于在 xpath 中传递 Datatable 项并收到错误“javascript 错误:参数 [0].scrollIntoView 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章
如何在Angular中为ngx-datatable-column传递多个管道?