Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 用量角器获取儿童元素_Html_Angularjs_Protractor - Fatal编程技术网

Html 用量角器获取儿童元素

Html 用量角器获取儿童元素,html,angularjs,protractor,Html,Angularjs,Protractor,一般来说,我不熟悉量角器和web开发,我有Java背景。我正在为一个web应用程序进行测试,但在尝试从元素获取文本时遇到问题 所以代码是这样组织的 <parent> <parent2> <child> <target-element> 我尝试检查项目是否显示,但它只检查找到的第一个项目 expect(ecmSummaryTile.implementedPlot.element(by.css('.tick')). is

一般来说,我不熟悉量角器和web开发,我有Java背景。我正在为一个web应用程序进行测试,但在尝试从元素获取文本时遇到问题

所以代码是这样组织的

<parent>
  <parent2>
    <child>
      <target-element>
我尝试检查项目是否显示,但它只检查找到的第一个项目

expect(ecmSummaryTile.implementedPlot.element(by.css('.tick')).
   isDisplayed()).toBe(true);
基于这些来自Digrator文档的示例,它们只显示了一个父元素的示例,但在本例中,我使用的代码有点复杂。有人能解释一下怎么做吗

代码更新 下面是代码的结构。不幸的是,我不能给出完整的代码,因为它是巨大的,而且对于我的公司来说,所以我不能粘贴整个源代码。但是我正在处理的项目的完整结构如下

<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)找到该元素,并一直向下搜索直到找到该元素,但我有多个元素具有相同的类名,这就是为什么我不这么做的原因

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");
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");

似乎是您提到的定位器不正确(忘记再包含一个标记“g”)。希望下面的代码能够解决您的问题

代码段:

 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);
              });
           });

似乎是您提到的定位器不正确(忘记再包含一个标记“g”)。希望下面的代码能够解决您的问题

代码段:

 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);
              });
           });
你试过这个吗

var text = $('.nvd3.nv-wrap.nv-axis > g').get(2);

expect(text.getText()).toEqual("TU");
你试过这个吗

var text = $('.nvd3.nv-wrap.nv-axis > g').get(2);

expect(text.getText()).toEqual("TU");

我试了一下,得到了同样的回答。我相信返回一个空字符串是正确的响应,因为第一个g只是所有其他g的父级,它们实际上包含我试图检索的值。我尝试将其更改为var first=$$('.nvd3.nv-wrap.nv-axis>g')。get(1);但仍然有同样的问题,它返回一个空字符串,预期“”等于'TU'@JoseHernandez好的,更新了一个猜测,检查它。这似乎没有帮助,我不断收到错误,指出找到了多个元素,并将选择第一个元素,然后出现超时错误。我尝试更新等待时间并使用get()代替first(),但没有得到任何改善results@JoseHernandez好的,没问题,你能发布页面的完整HTML源代码吗?谢谢。我这样试过,也有同样的反应。我相信返回一个空字符串是正确的响应,因为第一个g只是所有其他g的父级,它们实际上包含我试图检索的值。我尝试将其更改为var first=$$('.nvd3.nv-wrap.nv-axis>g')。get(1);但仍然有同样的问题,它返回一个空字符串,预期“”等于'TU'@JoseHernandez好的,更新了一个猜测,检查它。这似乎没有帮助,我不断收到错误,指出找到了多个元素,并将选择第一个元素,然后出现超时错误。我尝试更新等待时间并使用get()代替first(),但没有得到任何改善results@JoseHernandez好的,没问题,你能发布页面的完整HTML源代码吗?谢谢。这在打印元素时似乎有效,但是如果我尝试使用'>g>g'以及其他选项,如first()或get(),我仍然无法检索值。这可能是因为我瞄准了错误的父元素。我需要调查一下。运行时,我获得以下输出0''1''2''3''4''5''6''7''8''9''10'TU'11'我们'12'第13'FR'14'SA'15'SU'16'MO'17''18'TU'19'我们'20'第21'FR'22'SA'23'SU'24'MO'25''26''27''28''29''30'第31'FR'32'SA'33'SU 34'MO 35'TU 36'WE元素。所有(by.css('.nvd3.nv wrap.nv axis>g)首先.then(函数(ele){ele.getText().then(函数(txt){console.log(txt)});})@如果不起作用,乔瑟南德斯可以试试上面的方法。添加我的skype id-“sallojusresh”。我可以帮你我得到了一个错误,在快速搜索后我将其更新为var x=element.all(by.css('.nvd3.nv wrap.nv axis>g>g')).first();x、 然后(函数(txt){console.log(“txt:+txt”);});我仍然得到一个空字符串。我在日志中看到“通过(css选择器,.nvd3.nv wrap.nv axis)找到定位器的多个元素”-将使用第一个结果”,但是我没有看到html代码中遵循相同结构的另一个元素,但可能量角器正在查找另一个元素。我会尝试更多的事情,看看我是否能解决它@SureshSalloju,我会添加你,并让你知道如果我一直遇到这个问题。谢谢这在打印元素时似乎有效,但是如果我尝试使用'>g>g'和其他选项,如first()或get(),我仍然无法检索值。这可能是因为我瞄准了错误的父元素。我需要调查一下。运行时,我得到以下输出0''1''2''3''4''5''6''7''8''9''10'TU'11'WE'12'TH'13'FR'14'SA'15'SU'16'MO'17''18'TU 19'WE'20'TH'21'FR'22'SA'23'SU'24'MO'25''26''27''28''29''TH 30'TH FR 32'SA 33'SU 34'M