Selenium 的 ExecuteScript 函数的 Playwright 等价物是什么?

问题描述 投票:0回答:2

在 Selenium (c#) 中,您可以使用

IJavaScriptExecutor
在您找到的
IWebElement
上执行 javascript 命令,使用脚本中的
arguments[index]
字符串。例如,如果我想使用 javascript 来点击一个元素,我可以使用下面的代码来实现:

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", driver.FindElement(location));

在 PlayWright 中,我知道我们可以访问

Page.evaluate
方法,它可以让我们运行自定义的 javascript 函数,但对于我来说,我无法弄清楚如何找到我想为 javascript 单击的元素方法。

我已经尝试使用我在互联网上找到的一些东西,但它们一直没有工作,即使在我知道它在 selenium 中运行时它可以工作的情况下也是如此。这是我尝试过的一个例子:

string clickScript = "var aTags = document.getElementsByTagName(\"option\");\r\n" +
"var searchText = \"Card\";rln" +
"var found; \r\n" +
"\r\n" +
"for (var i = 0; i < aTags. length; i+) {\r\n" +
"    if (aTags[i] textContent == searchText) {\r\n" +
"        found = aTags[i];\r\n" +
"        break; \r\n" +
"    }r\n" +
"}r\n" +
"\r\n" +
"found.click();"
    
await Page.evaluate(() => clickScript);

编译并运行,我没有得到任何错误,但它只是没有点击元素。我的 Javascript 知识非常基础,我尝试了一些我发现的不同脚本,但没有一个真正与元素交互。

但是,当我使用

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", driver.FindElement(location));
时,selenium 能够毫无问题地与元素交互。

javascript c# selenium-webdriver playwright
2个回答
2
投票

您必须将字符串传递给

EvaluateAsync

await page.EvaluateString(@"() => {
    ///your lines of code
}");

0
投票

列出的另一个答案指出了我的特定代码的问题所在。对于可能来这里寻找答案的任何其他人,这就是我正在做的事情:

await Page.EvaluateAsync("document.getElementById(\"id\").click();");

这里通过id找到元素,然后调用

element.click()
方法。这在它对硒所做的每一种情况下都有效。

© www.soinside.com 2019 - 2024. All rights reserved.