2017-06-05 52 views
0

我一直在努力點擊一個按鈕使用量角器。問題是,即使驅動程序發現元素,但它仍然不會單擊它。任何幫助是提前感謝。量角器無法點擊按鈕,即使它發現它

下面是按鈕爲標誌的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>

量角器代碼: 這是規範文件: // 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('[email protected]'); 
    //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'] 


} 

回答

0

我已經使用Selenium-java進行了擴展,並測試了它的前端。 我用來測試的步驟和你的想法一樣。

使用單擊按鈕,檢查後存在。 (有時候點擊evt()會比檢查早),所以當它試圖點擊按鈕時,按鈕還不存在。

你的情況,我會做這樣的步驟:

  1. 使用ExpectedCondition檢查頁面已經被加載。 ExpectedConditions.until(visibilityOf(WebElement))。推入元素 像輸入(日誌或通過)。
  2. SendKeys用於輸入。比你可以檢查input.value
  3. 按鈕點擊檢查,這是存在和可點擊。
  4. by.id(btnID).click()。

我希望這會有所幫助。

+0

感謝塔拉斯,我已經使用了上述解決方案,它不work.Also該元素存在,否則它會給出和元素不存在異常。 – Rahul

0

你的代碼很混亂,你實際上聲明瞭protractor.ExpectedConditions,但是你從不以正確的方式使用它。

然後要小心,因爲所有的量角器方法都會返回promise,因爲所有的操作都是異步的。您應該正確使用承諾。

順便說一句,試試這個代碼,它應該等待元素是可見的,然後單擊它:

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'); 
    }); 
}); 
+0

謝謝,但它也不工作:'[17:14:08] E/launcher - Error:/Users/rtripath/Documents/protactor/specs.js:23 browser.executeScript('document.getElementByXpath('語法錯誤:無效或意外的令牌' – Rahul

+0

對不起,我連接了報價不好,請檢查我目前的編輯 – quirimmo

+0

感謝您的幫助@quirimmo。但這仍然不會沒有幫助,它有同樣的問題,只是跳過點擊和傳遞。參見下面鏈接中的圖像:https://ibb.co/f1hjca – Rahul