Passing Datatable item in xpath and getting error "javascript error: arguments[0].scrollIntoView is not a function"

Passing Datatable item in xpath and getting error "javascript error: arguments[0].scrollIntoView is not a function"

你好,我是 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 error: arguments[0].scrollIntoView is not a function

AllList.Contains(path) returns 一个布尔值。这是调用 arguments[0].scrollIntoView(false); 的上下文,这意味着 JavaScript 正在尝试对 true/false 值而不是 HTMLElement 对象执行 scrollIntoView(false);

AllList.Contains(path) 方法只是测试 path 是否是 AllList 集合中的一项。这对你想要完成的事情没有多大意义。您可能只需要传递 path:

je.ExecuteScript("arguments[0].scrollIntoView(false);", path);

由于 path 在 C# 中是一个 IWebElement,JavaScript 会将其解释为 HTMLElement 对象指向与您的相同的 HTML 标记IWebElement在C#中引用。这是调用执行 HTMLElement.scrollIntoView(boolean)arguments[0].scrollIntoView(false); 的上下文。我相信这是您要调用的 JavaScript 方法。