<selenium webdriver =“”js =“”>找不到元素&amp;隐含的等待问题

时间:2016-09-13 03:38:36

标签: 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'})

其中每一个都给出了同样的错误:no such element

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

我认为错误可能是其中之一:

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

环境

1 个答案:

答案 0 :(得分:1)

正如您尝试了所有可能的方法来查找元素,但您没有找到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()