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

我在过去一个月看过的所有东西都已经过时了。 这是我的问题,我浏览了一个网站上的5个不同的页面,然后才得到所需的数据。 我不能发射一个driver.get ,因为所有5个不同页面的url保持不变。

由于Node.js是asynchronous的,因此它在元素出现之前运行代码。 我意识到我可以使用超时,但我运行这个代码100的时间,所以超时将无法正常工作。

每个人都在网上说要做到这一点,但它已经过时,并不起作用:

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

如果你确实知道如何做到这一点,那就好了,因为我一直在寻找一个月的解决scheme。

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

 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); }); 

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

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

我没有访问你的应用程序这就是为什么我创build了一个演示代码的Gmail,我在电子邮件字段中input一些错误的值,并在一段时间后,我收到一条错误消息。 而这里的输出是'真'的。

 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); }); }); }); }); }); 

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表示 – 元素在网页上不存在。

尝试在你的代码。