Selenium NoSuchElementError:没有这样的元素:尝试通过WebDriverJ定位元素时无法定位元素

Selenium NoSuchElementError:没有这样的元素:尝试通过WebDriverJ定位元素时无法定位元素,selenium,selenium-webdriver,xpath,css-selectors,webdriver,Selenium,Selenium Webdriver,Xpath,Css Selectors,Webdriver,我使用css定位元素,我试图避免xpath以防万一,但我在元素方面遇到了问题。我仍然得到错误: (node:7516) UnhandledPromiseRejectionWarning: NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"[name-firstName]"} 它只适用于xpath,但我想使用css定位器。在定位元素时避免xpath

我使用css定位元素,我试图避免xpath以防万一,但我在元素方面遇到了问题。我仍然得到错误:

(node:7516) UnhandledPromiseRejectionWarning: NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"[name-firstName]"}
它只适用于xpath,但我想使用css定位器。在定位元素时避免xpath是一种好的做法吗?谢谢你们

以下是整个要素:

<input type="text" class="f w-input ng-pristine ng-invalid ng-invalid-required ng-touched" name="firstName" required="" ng-readonly="vm.showLoading" ng-model="vm.formData.firstName" placeholder="Your First Name">

两个实例中使用的CSS选择器不同。改变

[name-firstName]

在第二种情况下


此外,您的代码看起来过于复杂。您是否尝试过类似的方法?

当您有
名称属性时,您可以使用

driver.get("www.examplewebsiteonly.com")
    .then(function() {
        return driver.wait(until.elementLocated(By.name("firstName")), 20000)
        .then(function(){
            driver.sleep(20000)
            .then(function(){
                        return driver.findElement(By.name("firstName")).sendKeys("FirstName");
                    })
        })
    })

我用Selenium提供的
name
选择器替换了
css
选择器。也可以删除单引号以添加双引号。

根据您共享的HTML来标识所需元素,您可以使用以下任一定位器策略:

  • css

    return driver.wait(until.elementLocated(By.css("input.f.w-input.ng-pristine.ng-invalid.ng-invalid-required.ng-touched[name='firstName'][placeholder='Your First Name']")), 20000)
    
  • xpath

    return driver.wait(until.elementLocated(By.xpath("//input[@class='f w-input ng-pristine ng-invalid ng-invalid-required ng-touched' and @name='firstName'][@ng-model=\"vm.formData.firstName\"]")), 20000)
    

当你说
不工作时
-它会抛出任何错误还是什么都不做?请澄清。这并不是问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-@阿图尔萨马当然是这样。问题标题指的是一个
NoSuchElementError
。提供的错误文本显示使用了CSS选择器,
[name firstName]
,鉴于提供的HTML,这是不正确的。OP请求了一个CSS选择器,所以我更正了它。你认为OP的问题是什么,我没有回答?这个元素在
IFRAME
中吗?
return driver.wait(until.elementLocated(By.css("input.f.w-input.ng-pristine.ng-invalid.ng-invalid-required.ng-touched[name='firstName'][placeholder='Your First Name']")), 20000)
return driver.wait(until.elementLocated(By.xpath("//input[@class='f w-input ng-pristine ng-invalid ng-invalid-required ng-touched' and @name='firstName'][@ng-model=\"vm.formData.firstName\"]")), 20000)