量角器即使找到它也无法点击按钮

时间:2017-06-05 10:48:51

标签: javascript html xpath selenium-webdriver protractor

我一直在努力点击使用Protractor的按钮。问题是,即使驱动程序找到该元素,但它仍然没有点击它。感谢任何帮助。谢谢提前。

以下是登录按钮的HTML:

div class="row mod-form-button">
                <button id="sign_in" class="mod-main" tabindex="4">Sign in</button>
            </div>
        <div class="row">
            <div class="row">
                    <span class="nowrap">Not a member yet?</span>
                    <a class="nowrap" data-component="spinner" id="create_account"
                       href="create_account?client_id=UDPWeb1&callback=https%3A%2F%2F-na1-stg1.login.com">
                        Get an Test ID</a>
                </div>

量角器代码: 这是specs文件: // spec.js

    describe(' Demo', function() {

  it('Should Login to Demo Site', function() {
    browser.waitForAngularEnabled(false);
    browser.get('https://stage.com');



   // var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
//browser.wait(EC.elementToBeClickable($('password')), 5000);
    element(by.id('password')).sendKeys('123456');
    element(by.id('username')).sendKeys('Tester@test.com');
    //browser.sleep(35000);

     var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
 element(by.id('sign_in')).click();
 browser.sleep(5000);
 var el = element(by.id('sign_in'));
browser.executeScript('arguments[0].scrollIntoView()', el.getWebElement());

el.click();
// browser.wait(EC.elementToBeClickable($('sign_in')), 5000);
//browser.wait(EC.elementToBeClickable($('.btn.coral-btn.coral-btn-primary')), 5000);
//element(by.css('.btn.coral-btn.coral-btn-primary')).click();
  //  expect(element(by.binding('latest')).getText()).
      //  toEqual('5'); // This is wrong!
  });
}); 

这是配置文件: //Config.js

exports.config = {

  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
   allScriptsTimeout: 5000000,
  specs: ['specs.js']


}

2 个答案:

答案 0 :(得分:0)

我只使用Selenium-java进行exp,并使用它测试前端。 我用来测试的步骤与你的一样。

使用单击按钮,检查后是否存在。 (有时点击evt()比检查更早)。所以当它试图点击按钮时,按钮还不存在。

在您的情况下,我将执行以下步骤:

  1. 使用ExpectedCondition检查该页面是否已加载。 ExpectedConditions.until(visibilityOf(WebElement))。推元素 喜欢输入(记录或通过)。
  2. SendKeys输入。你可以检查input.value
  3. 按钮点击检查,存在且可点击。
  4. by.id(btnID)。点击()。
  5. 我希望它会有所帮助。

答案 1 :(得分:0)

您的代码非常混乱,您实际上声明了protractor.ExpectedConditions,但您从未以正确的方式使用它。

然后要小心,因为所有的量角器方法都返回promises,因为所有操作都是异步的。你应该正确使用promises。

顺便说一句,试试这段代码,它应该等待元素可见,然后点击它:

var EC = protractor.ExpectedConditions;
var signinButton = element(by.id('sign_in'));
// waiting for 10 seconds that the button will be visible
browser.wait(EC.visibilityOf(signinButton ), 10000, "Button signin not visible");
    browser.executeScript('document.querySelector("#sign_in").scrollIntoView()').then(function() {
  signinButton.click().then(function() {
    console.log('button has been clicked here');
  });
});