一旦元素存在,如何运行selenium webdriver代码

时间:2016-09-27 17:52:15

标签: node.js selenium selenium-webdriver

过去一个月我所看到的一切都已经过时了。 这是我的问题,在我获得所需的数据之前,我在一个网站上浏览了大约5个不同的页面。我无法触发driver.get,因为所有5个不同页面的网址都保持不变。

由于Node.js是异步的,因此它在元素出现之前运行代码。我意识到我可以使用超时,但我已经运行了100次这样的代码,因此超时工作无法正常工作。

网上的每个人都说这样做,但它已经过时且无法运作:

driver.findElement(By.css('#gridsortlink')).then(function(webElement) {
webElement.isElementPresent(By.css('#gridsortlink'))
.then(function(found) { console.log(found); });
});

如果您确实知道如何做到这一点,那就很好,因为我现在一直在为解决方案寻找一个月。

3 个答案:

答案 0 :(得分:1)

您尝试的尝试看起来不正确,您应该尝试如下: -

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

driver.wait(until.elementLocated(By.css('#gridsortlink')), 5 * 1000).then(function(found) {
    console.log(found);
});

答案 1 :(得分:0)

代替webElement.isElementPresent尝试使用driver.isElementPresent

driver.findElement(By.css('#gridsortlink')).then(function(webElement) {
driver.isElementPresent(By.css('#gridsortlink'))
.then(function(found) { console.log(found); });
});

我无法访问您的应用程序,这就是为什么我为gmail创建了一个演示代码,我在电子邮件字段中输入了一些错误的值,一段时间后我收到了一条错误消息。这里的输出是'true'。

var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().forBrowser('chrome').build();
var By = webdriver.By;
driver.get('http://gmail.com');

driver.findElement(By.id("Email")).then(function(emailText){
   emailText.sendKeys("aaaaaaaaaaaaaaaaaaaaaaaaaadddddddddddd").then(function(){
     driver.findElement(By.id("next")).then(function(submit){
        submit.click().then(function(){
             driver.isElementPresent(By.className("error-msg")).then(function(text){
                console.log(text);
             });
        });
     });
   });
}); 

答案 2 :(得分:0)

Java代码:

if((driver.findElements(By.css('#gridsortlink')).size())==1)    
{
system.out.println(executecode);
}
else
{
system.out.println(element is not exist in webpage);
}

您可以检查元素是否存在。

driver.findElements(By.css('#gridsortlink')).size()此行返回 0或1

1表示 - 元素存在于网页上。

0表示 - 网页上不存在元素。

尝试使用您的代码。