如何在运行时突出量角器中的元素

时间:2016-04-26 09:13:14

标签: javascript protractor

在我的量角器框架中,我想强调UI中找到的元素。 我尝试使用下面的代码,如果我使用loading = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; loading.frame = CGRectMake(round((self.view.frame.size.width - 25) / 2), round((self.view.frame.size.height - 25) / 2), 25, 25); [self.view addSubview:loading]; [loading startAnimating]; NSString *videoStringUrl=[NSString stringWithFormat:@"%@",[[arrayPhotos objectAtIndex:indexPath.row]valueForKey:@"source"]]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ VideoURL=[NSURL URLWithString:videoStringUrl]; AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:VideoURL options:nil]; CMTime duration = sourceAsset.duration; float seconds = CMTimeGetSeconds(duration); if (seconds<4) { [self performSegueWithIdentifier:@"Edit" sender:self]; } else { [self performSegueWithIdentifier:@"Trimmer" sender:self]; } });}); 它工作正常。当我使用下面的locators(id,name,className,linkText,xpath)代码时,代码无法正常工作并抛出&#34; 无效的定位器&#34;错误。

而不是&#34; locators (buttonText,repeater,model,binding)&#34;如果我使用&#34; browser.driver.findElement(locator);&#34;代码无效并抛出

  

&#34;致命错误:CALL_AND_RETRY_LAST分配失败 - 处理完毕   存储器&#34;

节点版本--- 2.15.1

量角器版本--- 3.2.2

我如何调用该函数: -

element(locator); ---工作正常

highlightElement(by.linkText('log In')); - 投掷错误

highlightElement(by.buttonText('Place order'));

请帮助我有没有其他方法来突出量角器中的元素。

此致

Deepak Kumar Susarla

1 个答案:

答案 0 :(得分:2)

你非常接近。您的函数正在运行的所有定位器都直接从webDriver继承。此清单包括 - className, css, id, linkTest, js, name, partialLinkText, tagName, and xpath;

不工作的其他人是Protractor的原型继承。此列表包括 - addLocator, binding, exactBinding, model, buttonText, partialButtonText, repeater, exactRepeater, cssContainingText, options, and deepCss

同样 - 函数findElement中的调用继承自webDriver。所以你实际上是在调用不受支持的findElement(by.buttonText())(量角器&#39; s element(by.buttonText())会起作用)。

就你的代码而言,我修改了一些东西,它似乎对我有用:

highlightElement = function(el){
  console.log("highlight--");

  console.log("locator---:"+el.locator());

  return browser.driver.executeScript("arguments[0].setAttribute('style', arguments[1]);",el.getWebElement(), "color: Red; border: 2px solid red;").
  then(function(resp){
    browser.sleep(2000);
    return el;
  },function(err){
    console.log("error is :"+err);
  });
};

请注意 el.locator() el.getWebElement(),而不是在函数var ele = browser.driver.findElement(locator);中声明元素,您只需传递它即可元素作为参数。要提供参考,请参阅我的示例代码:

describe('Protractor Demo App', function() {
  it('changes the color', function() {
    browser.get('http://juliemr.github.io/protractor-demo/');
    var ely = element(by.model('first')); // using model
    highlightElement(ely); // works with model
    browser.sleep(5000); // just to see the header change color
    expect(ely.getAttribute('style')).toContain('color: red');
  });
});

来源:https://angular.github.io/protractor/#/api