在 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 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

将 IwebElement 传递到 html 敏捷包 C#

如何在Angular中为ngx-datatable-column传递多个管道?

Datatable如何将数据从输入传递到控制器

jquery dataTable Ajax调用中未传递参数

如何在 BLToolkit 中将 DataTable 作为参数传递?

如何将 DataTable.Select() 结果传递给新的 DataTable?