selenium 无此类元素错误:无此元素:尝试通过WebdriverJS定位元素时,无法定位元素

idfiyjo8  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(166)

我使用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">

下面是代码试用版:

driver.get("www.examplewebsiteonly.com")
    .then(function() {
        return driver.wait(until.elementLocated(By.css('[name=firstName]')), 20000)
        .then(function(){
            driver.sleep(20000)
            .then(function(){
                        return driver.findElement(By.css('[name-firstName]')).sendKeys("FirstName");
                    })
        })
    })
l5tcr1uw

l5tcr1uw1#

当您拥有name属性时,您可以使用

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选择器。

rhfm7lfc

rhfm7lfc2#

根据您共享的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)
ovfsdjhp

ovfsdjhp3#

在两个示例中未使用相同的CSS选择器。更改

[name-firstName]

[name='firstName']

在第二种情况下。
另外,您的代码看起来过于复杂。您是否尝试过this之类的代码?

相关问题