Javascript 在nodejs中使用webdriver selenium选择按钮元素

Javascript 在nodejs中使用webdriver selenium选择按钮元素,javascript,html,node.js,selenium-webdriver,Javascript,Html,Node.js,Selenium Webdriver,我有一个html页面发布数据到服务器上,我需要选择自动作业的特定按钮 姓名2 名称2 名字3 文本1 文本2 我正在尝试使用selenium选择“text2” (await driver).findElement(By.className("cdk-overlay-pane btn btn-blue")).click(); 但它失败了: Unable to locate element: {"method":"css selector","selecto

我有一个html页面发布数据到服务器上,我需要选择自动作业的特定按钮


姓名2
名称2

名字3
  • 文本1
  • 文本2
我正在尝试使用selenium选择“text2”

      (await driver).findElement(By.className("cdk-overlay-pane btn btn-blue")).click();
但它失败了:

      Unable to locate element: {"method":"css selector","selector":"cdk-overlay-pane btn btn-blue"} 
也试过

 (await driver).findElement(By.className("btn btn-blue")).click();
又失败了。
如何选择?

根本原因是源代码中没有包含
cdk覆盖窗格btn btn blue
的元素。相反,类为
btn-btn-blue的元素位于类为
cdk覆盖窗格的div中。因此,在本例中,当您使用
css
指向元素时,必须使用
By.css
。仅当您使用目标元素的
class
定位元素时,请使用
By.className

注意: 不必将元素
中类之间的空格显式替换为
,因为硒代码会处理这一问题

例:

findElement(By.className('btn.btn blue'))
-正确

findElement(按.className('btn btn blue'))
-正确

findElement(By.className('.btn.btn blue'))
-错误(因为selenium将在
前面加上此处发送的类名)

以下是selenium使用的逻辑供您参考

static className(name) {
    let names = name.split(/\s+/g)
        .filter(s => s.length > 0)
        .map(s => escapeCss(s));
    return By.css('.' + names.join('.'));
  }
来源

因此,您可以尝试以下方法

(await driver).findElement(By.css(".cdk-overlay-pane .btn.btn-blue")).click();
截图:


它也失败了,就像{“cdk覆盖窗格\.btn\.btn蓝色”}请检查更新的答案。如果仍然出现
NoTouchElement异常
请检查元素是否包装在iframe中。@trmt请在更新的答案中找到详细的解释。如果你还有任何问题,请告诉我。