在我的量角器框架中,我想强调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
答案 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');
});
});