javascript - <Selenium WebDriver JS> 找不到元素和隐式等待问题

标签 javascript selenium selenium-webdriver webdriver selenium-chromedriver

我一直在尝试用 JavaScript 编写一个 Selenium 脚本来填写我网站上的“电子邮件”字段,但它一直告诉我“找不到元素”...

我正在尝试找到这个元素:

<input type="email" placeholder="Email" name="email" class="form-control sweep" data-radium="true" data-reactid=".btcvpfkiyo.0.$/=10=22.0.0.$=12.0.0.0.$=10.$=11.0.$/=10.$=10.0" disabled="">

首先我进入该页面,然后等待几秒钟,然后尝试查找该元素:

driver.get('www.mysite.com').then(function() {
driver.manage().timeouts().implicitlyWait(10000);
driver.findElement({name:'email'})
    .then(function(present) {
        if (present) {
            console.log("Found");
        }
    });
});

我尝试通过多种方式访问​​此元素...以下是我尝试过的方法:

driver.findElement(By.xpath("//input[@name='email']"))
driver.findElement(By.css("input[type='email']"))
driver.findElement(By.css("input[name='email']"))
driver.findElement({name:'email'})

其中每一个都会给我同样的错误:没有这样的元素

奇怪的是,当我使用jquery使用js工具选择元素时,它立即找到该元素。上面的每个命令都在 jquery 中进行了测试并且有效

我认为错误可能是以下之一:

  • 也许我的隐式等待不起作用(它确实等待了 10 秒,但我 不确定它是否试图立即找到该元素)。我也尝试过implicitlyWait(10000).then但也许我做错了
  • 也许我的选择器是错误的

环境

最佳答案

由于您已尝试了所有可能的方法来查找元素,但您没有查找 frame/iframe

任何frame/iframe内都可能存在所需的元素。

如果存在 frame/iframe ,您需要使用 WebDriver#switchTo() 切换该 frame/iframe在找到所需的元素之前,如下所示:-

driver.switchTo().frame("frame/iframe id or name")

//Now find desire element inside frame/iframe

//After doing all stuff inside frame/iframe switch back to default content 
driver.switchTo().defaultContent() 

关于javascript - <Selenium WebDriver JS> 找不到元素和隐式等待问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39461855/

相关文章:

javascript - 将 jquery 选择器作为参数传递

javascript - 如何使用 md-virtual-repeat 在 angularjs 中使用过滤器或搜索?

java - 如何通过元素在页面上的位置获取元素?

java - Xpath是正确的仍然没有得到这样的元素: Unable to locate element

python - 使用 Selenium 登录 Twitter (X) 会触发反机器人检测

javascript - 在主干中捕获超时事件

javascript - 在 slider 上动态添加类

seleniumclear() 命令不清除元素

python - 在 Selenium 中不再处于 DOM 中后切换回父框架

java - 如何获取 POI API 的依赖关系?