Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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 无法使用xpath查询提取值_Html_Xpath - Fatal编程技术网

Html 无法使用xpath查询提取值

Html 无法使用xpath查询提取值,html,xpath,Html,Xpath,学习使用xpath查询。我有一个问题,我无法提取一个值,该值会在刷新页面时更改。 例如,我试图从以下html代码中提取值“62804”:“canvas.strokeText('Answer:62804',90112);”。你知道怎么做吗。谢谢 <html> <div id="content" class="large-12 columns"> <div class="example"> <h3>Challenging DOM&l

学习使用xpath查询。我有一个问题,我无法提取一个值,该值会在刷新页面时更改。 例如,我试图从以下html代码中提取值“62804”:“canvas.strokeText('Answer:62804',90112);”。你知道怎么做吗。谢谢

<html>
<div id="content" class="large-12 columns">
        <div class="example">
  <h3>Challenging DOM</h3>
  <p>The hardest part in automated web testing is finding the best locators (e.g., ones that well named, unique, and unlikely to change). It's more often than not that the application you're testing was not built with this concept in mind. This example demonstrates that with unique IDs, a table with no helpful locators, and a canvas element.</p>
  <hr>

  <div class="row">
    <div class="large-12 columns large-centered">
      <div class="large-2 columns">
        <a id="debcda40-b692-0137-457b-2213fbd48497" href="" class="button">qux</a><br>
        <a id="debce410-b692-0137-457c-2213fbd48497" href="" class="button alert">baz</a><br>
        <a id="debd03d0-b692-0137-457d-2213fbd48497" href="" class="button success">foo</a><br>
      </div>
      <div class="large-10 columns">
        <table>
          <thead>
            <tr>
              <th>Lorem</th>
              <th>Ipsum</th>
              <th>Dolor</th>
              <th>Sit</th>
              <th>Amet</th>
              <th>Diceret</th>
              <th>Action</th>
            </tr>
          </thead>
          <tbody>

            <tr>
              <td>Iuvaret0</td>
              <td>Apeirian0</td>
              <td>Adipisci0</td>
              <td>Definiebas0</td>
              <td>Consequuntur0</td>
              <td>Phaedrum0</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret1</td>
              <td>Apeirian1</td>
              <td>Adipisci1</td>
              <td>Definiebas1</td>
              <td>Consequuntur1</td>
              <td>Phaedrum1</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret2</td>
              <td>Apeirian2</td>
              <td>Adipisci2</td>
              <td>Definiebas2</td>
              <td>Consequuntur2</td>
              <td>Phaedrum2</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret3</td>
              <td>Apeirian3</td>
              <td>Adipisci3</td>
              <td>Definiebas3</td>
              <td>Consequuntur3</td>
              <td>Phaedrum3</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret4</td>
              <td>Apeirian4</td>
              <td>Adipisci4</td>
              <td>Definiebas4</td>
              <td>Consequuntur4</td>
              <td>Phaedrum4</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret5</td>
              <td>Apeirian5</td>
              <td>Adipisci5</td>
              <td>Definiebas5</td>
              <td>Consequuntur5</td>
              <td>Phaedrum5</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret6</td>
              <td>Apeirian6</td>
              <td>Adipisci6</td>
              <td>Definiebas6</td>
              <td>Consequuntur6</td>
              <td>Phaedrum6</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret7</td>
              <td>Apeirian7</td>
              <td>Adipisci7</td>
              <td>Definiebas7</td>
              <td>Consequuntur7</td>
              <td>Phaedrum7</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret8</td>
              <td>Apeirian8</td>
              <td>Adipisci8</td>
              <td>Definiebas8</td>
              <td>Consequuntur8</td>
              <td>Phaedrum8</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>

            <tr>
              <td>Iuvaret9</td>
              <td>Apeirian9</td>
              <td>Adipisci9</td>
              <td>Definiebas9</td>
              <td>Consequuntur9</td>
              <td>Phaedrum9</td>
              <td>
                <a href="#edit">edit</a>
                <a href="#delete">delete</a>
              </td>
            </tr>


        </tbody></table>
        <div class="row">
          <div class="large-10 columns">
            <canvas id="canvas" width="599" height="200" style="border:1px dotted;"></canvas>
          </div>
        </div>
      </div>
    </div>
  </div>
  <hr>
</div>

<script>
var canvas_el = document.getElementById('canvas');
var canvas = canvas_el.getContext('2d');
canvas.font = '60px Arial';
canvas.strokeText('Answer: 62804',90,112);
</script>

      </div>
</html>

挑战DOM
自动化web测试中最困难的部分是找到最好的定位器(例如,名称良好、唯一且不太可能更改的定位器)。通常情况下,您正在测试的应用程序并没有考虑到这个概念。此示例演示了如何使用唯一ID、一个没有有用定位器的表和一个canvas元素





洛勒姆 乱数假文 多洛 坐着 艾米特 迪塞雷特 行动 Iuvaret0 Apeirian0 Adipisci0 定义BAS0 消耗量 Phaedrum0 Iuvaret1 Apeirian 1 己二酸 定义1 消费需求1 Phaedrum1 Iuvaret2 Apeirian 2 己二酸二酯 定义2 消费需求2 Phaedrum2 Iuvaret3 Apeirian 3 己二酸 定义BAS3 消费需求3 Phaedrum3 Iuvaret4 Apeirian4 己二酸四酯 定义BAS4 消费需求4 Phaedrum4 Iuvaret5 Apeirian 5 己二酸 定义BAS5 消费需求5 Phaedrum5 Iuvaret6 Apeirian 6 己二酸六酯 定义BAS6 消费需求 Phaedrum6 Iuvaret7 Apeirian 7 Adipisci7 定义BAS7 消费需求7 Phaedrum7 Iuvaret8 Apeirian 8 Adipisci8 定义BAS8 消费需求8 Phaedrum8 Iuvaret9 Apeirian9 Adipisci9 定义BAS9 消费需求 Phaedrum9
var canvas_el=document.getElementById('canvas'); var canvas=canvas_el.getContext('2d'); canvas.font='60px Arial'; strokeText('答案:62804',90112);
要使用XPath查询,输入文档必须是有效的XML。
在您的情况下不是这样,因为有些标记没有正确关闭(您可以使用XMLLint工具进行验证)。 例如



应替换为


更正XML后,可以使用XPath查询

第一步是选择脚本元素:

//script
输出为:

Element='<script>
            var canvas_el = document.getElementById('canvas');
            var canvas = canvas_el.getContext('2d');
            canvas.font = '60px Arial';
            canvas.strokeText('Answer: 62804',90,112);
        </script>'
结果如下:

String='62804'


注意:例如,您可以使用Javascript以更灵活的方式执行相同的操作。
XPath非常适合查询XML(如我提到的第一个操作),但执行字符串解析非常复杂(如我提到的第二个操作)


希望能有所帮助。

@Prerna-pal我应该在原始评论中包括,这个xpath查询是针对java selenium项目的。我曾尝试在代码中使用上述xpath,但得到了一个“NoSuchElementException”。Hi@trant7,如果您尝试使用相同的查询并更正了输入,则应该可以工作。我用一个在线工具测试了它。几个问题:-第一个xpath查询可以工作吗
/html/div/script
-你能分享Java代码吗?嗨@Prerna pal,我在一个在线xpath测试仪中测试了你的原始查询“substring before(substring before)(/html/div/script/text(),'canvas.strokeText('Answer:'),'',90112)”,但它不起作用。将查询更新为以下“substring before(substring after(//script/text(),'canvas.strokeText('Answer:'),'',90112')”,并成功。当我在java中尝试查询时,我得到以下错误“org.openqa.selenium.InvalidSelectorException:无效选择器:我更新了响应。如果可以,请将其标记为已回答。
String='62804'