sso表单的webdriver错误

时间:2017-03-19 19:04:38

标签: javascript selenium

我正在尝试自动化访问权限并在法国网站上进行一些报废。 (http://espaceclientcanal.canal-plus.com/aide/pid792-s-inscrire-sur-l-espace-client.html)。

我有一个有效的帐户,但我无法使用selenium登录。 我已设法使用xpath表达式或使用以下代码获取元素:

browser.findElement(webdriver.By.id('sso-email')).sendKeys('mymail@org.com');
//var emailField = browser.findElement(webdriver.By.xpath("//input[@id='sso-email']")) ;

我还使用以下函数来确保元素存在:

function isElementPresent(driver, by){
    try{
      driver.findElement(by);
      return true;
    }catch(NoSuchElementException){
      return false;
    }
}

像我这样初始化我的webdriver:

var fs = require('fs');
var chromedriver = require('chromedriver');
var webdriver = require('selenium-webdriver');

var browser = new webdriver.Builder().usingServer().withCapabilities({ 'browserName': 'chrome' }).build();

每次我收到以下错误:

  

NoSuchElementError:没有这样的元素:无法找到元素:   {"方法":" css选择器","选择器":" * [id =" sso-email"]&# 34;}(会话   info:chrome = 56.0.2924.87)(驱动信息:chromedriver = 2.28.455520   (cc17746adff54984afff480136733114c6b3704b),platform = Windows NT   10.0.14393 x86_64)

我对我的xpath表达有信心(也许我错了)...

我不明白错误是什么。

登录表单似乎是作为组件生成的(首先显示进度轮);它是否有可能专门用于防止脚本自动化?

1 个答案:

答案 0 :(得分:0)

您的Selenium代码看起来不错但不完整。

登录表单位于iframe name="pass_iframe"内。

因此,在找到电子邮件和密码字段之前,您需要从页面获取iframe,切换到它,识别登录元素并执行登录,然后切换回主页。

var iframe  = driver.findElements(webdriver.By.xpath('iframe[name='pass_iframe']'));
driver.switchTo().frame(iframe);
//find the login elements
//do the login
driver.switchTo().defaultContent();