【问题标题】:<Selenium WebDriver JS> Can't find element & implicit wait problems<Selenium WebDriver JS> 找不到元素和隐式等待问题
【发布时间】:2016-09-13 03:38:35
【问题描述】:

我一直在尝试用 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,但也许我做错了
  • 可能我的选择器错误

环境

【问题讨论】:

  • 可能存在frame/iframe,需要验证它,如果需要的元素存在于任何frame/iframe 中,您需要在找到元素之前切换它。谢谢

标签: javascript selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案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() 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2013-05-28
    • 2018-05-20
    • 2018-01-24
    • 1970-01-01
    相关资源
    最近更新 更多