我是Protractor和Web开发的新手,我来自Java背景。我正在测试一个Web应用程序,我在尝试从元素中获取文本时遇到问题。
所以代码以这种方式组织
<parent>
<parent2>
<child>
<target-element>
code 我附上了代码的图像。我的问题是有几个子元素具有相同的类名和标记名。我试图通过索引拉它们然后尝试从目标元素读取文本但它返回一个空字符串。所以从图像中我试图从名称标签'text'中检索文本'TU',但我似乎无法做到这一点。这是我尝试过的一件事。
var first = element.all(by.css('.nvd3.nv-wrap.nv-axis g')).get(2);
expect(first.getText()).toBe('TU');
我尝试检查项目是否正在显示,但只会检查找到的第一个项目
expect(ecmSummaryTile.implementedPlot.element(by.css('.tick')).
isDisplayed()).toBe(true);
基于Protractor文档中的这些示例,它们仅显示具有一个父元素的示例,但在这种情况下,我正在使用的代码有点复杂。任何人都可以阐明如何做到这一点?
代码更新 这是代码的结构。不幸的是,我不能提供完整的代码,因为它是庞大的,对我的公司,所以我不能粘贴整个源代码。但我正在使用的项目的完整结构如下
<div class = "ecm-summary-chart-container">
<nvd3 class = "ng-isolate-scope">
<svg class = "nvd3-svg">
<g class = "nvd3 nv-wrap nv-lineChart">
<g>
<g class="nv-legendWrap">
<g class="nv-focus">
<g class="nv-x nv-axis nvd3-svg">
<g class="nvd3 nv-wrap nv-axis">
<g>
<g class="tick">
.
.
.
我知道我可以使用嵌套元素(by.css)找到元素并继续向下直到我到达元素,但是我有多个具有相同类名的元素,这就是为什么我不这样做
答案 0 :(得分:0)
var first = element.all(by.css('.nvd3.nv-wrap.nv-axis g')).get(2);
我认为你走在正确的轨道上,除了我会在这里添加直接的亲子关系并致电first()
以获得第一个g
:
var first = $$('.nvd3.nv-wrap.nv-axis > g').first();
var text = first.$('.tick text');
expect(text.getText()).toEqual("TU");
您可能还需要等待元素具有TU
值:
var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement(text, "TU"), 10000);
expect(text.getText()).toEqual("TU");
答案 1 :(得分:0)
您提到的定位器似乎不正确(忘了再添加一个标签&#39; g &#39;)。希望下面的代码可以解决您的问题。
代码段:
element.all(by.css('.nvd3.nv-wrap.nv-axis>g>g')).each(function(element,
index) {
// will get each element
element.getText().then(function (text) {
console.log(index, text);
});
});
答案 2 :(得分:0)
你试过这个吗?
var text = $('.nvd3.nv-wrap.nv-axis > g').get(2);
expect(text.getText()).toEqual("TU");