无法单击任何可见元素

时间:2013-08-21 13:34:37

标签: angularjs selenium selenium-webdriver

我正在尝试用protractorjs测试我的angularjs应用程序。我已经设置了selenium并让服务器和转轮工作。我的问题是,当我运行测试时,我得到了ElementNotVisibleError。我知道我想要选择的元素是隐藏的,直到填写了某些字段,这就是我希望保留它的方式。

我的问题是,是否通过调用等待或睡眠来解决问题。我尝试了许多等待和睡眠的变化,但没有运气。

我的测试代码是

it('navigates the user to the login page', function(){
    ptor = protractor.getInstance();
    ptor.get('http://localhost:2222/#/page');

    ptor.findElement(protractor.By.input('input.type1')).sendKeys('one');
    ptor.findElement(protractor.By.input('input.type2')).sendKeys('two');
    ptor.findElement(protractor.By.input('input.type3')).sendKeys('three');
    ptor.findElement(protractor.By.input('input.type4')).sendKeys('four');
    ptor.findElement(protractor.By.input('input.type5')).sendKeys('five');
    ptor.findElement(protractor.By.input('input.type6')).sendKeys('six');
    ptor.sleep(5000);
    ptor.findElement(protractor.By.id('clickableBtn')).click();//not visible until above fields populated

}, 1000000);

量角器的消息是

Message:
    ElementNotVisibleError: element not visible

4 个答案:

答案 0 :(得分:2)

如果在所有字段中输入之前元素不可见,那是因为Javascript。输入最后一个字段后,您可能需要输入TabEnter来启动该Javascript:

ptor.findElement(protractor.By.input('input.type6')).sendKeys(Keys.Tab);

答案 1 :(得分:2)

使用javascript我可以点击

var linkToClick = ptor.driver.findElement(protractor.By.id('clickableBtn'));

ptor.executeScript("arguments[0].click();", linkToClick );

答案 2 :(得分:1)

是的,WebDriver允许您直接在元素上执行javascript,所以只需执行javascript .click。您需要转换为您自己的语言,但这是我使用C#

的方式
        IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
        js.ExecuteScript("arguments[0].click()", element);
        Browser.WaitForPageLoad(driver);

我实际上创建了一个扩展程序方法,这样我只需键入element.InvisibleClick(驱动程序)并为它点击它。有关详情,可以找到documented HERE

答案 3 :(得分:-1)

您可以随时给它opacity:0

-moz-opacity: 0.00; opacity:.00; filter: alpha(opacity=00);

这适用于所有浏览器。