在 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 能够毫无问题地与元素交互。
您必须将字符串传递给
EvaluateAsync
:
await page.EvaluateString(@"() => {
///your lines of code
}");
列出的另一个答案指出了我的特定代码的问题所在。对于可能来这里寻找答案的任何其他人,这就是我正在做的事情:
await Page.EvaluateAsync("document.getElementById(\"id\").click();");
这里通过id找到元素,然后调用
element.click()
方法。这在它对硒所做的每一种情况下都有效。