Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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
Java 使用xpath轴在Selenium中遍历DOM_Java_Javascript_Html_Selenium_Xpath - Fatal编程技术网

Java 使用xpath轴在Selenium中遍历DOM

Java 使用xpath轴在Selenium中遍历DOM,java,javascript,html,selenium,xpath,Java,Javascript,Html,Selenium,Xpath,我正在为动态网页编写Selenium测试。在这段代码中,我从excel表格中读取并检查元素是否存在于给定的网页中。我已将代码的重要部分标记为注释 try { driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS); <<//**This works fine, as tested**>>

我正在为动态网页编写Selenium测试。在这段代码中,我从excel表格中读取并检查元素是否存在于给定的网页中。我已将代码的重要部分标记为注释

try {
      driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
      <<//**This works fine, as tested**>>                                       
      element =  driver.findElement(By.xpath("//span[contains(text(),'"+str.split("\\s+")[0].trim()+"')]"));

     str1 = element.getText().replace("\n", " ").trim();


        //check if the param from the sheet does not matche the param grabbed
        if (!str1.contentEquals(str))
            {
              finalassert = false  ;
              System.out.println("param from sheet does not match");
             }
         else
             {                                                                          
              <<//**This does not work as expected.**>>
              element =  driver.findElement(By.xpath("//span[contains(text(),'"+str.split("\\s+")                [0].trim()+"')]/parent::div/following-sibling::div/child::div"));

              System.out.println("ELEMENT FOUND: "+element.getText());
              element.click();
              Thread.sleep(1000); 

              driver.manage().timeouts().implicitlyWait(10, TimeUnit.MILLISECONDS);
              System.out.println(str1);

               }

   } catch (NoSuchElementException ignored) 
          {
           System.out.println(str);

           finalassert = false  ; 

           }
我的目标是单击输入框,它就在它旁边(水平方向相反)。动态生成的代码如下所示:

    <div class="x-unsized x-field-input" id="ext-input-98">
<<//**This is what I would like to click**>>
    <input class="x-input-el x-form-field x-input-number" type="number" id="ext-element-937" step="1" name="a0" readonly="true" tabindex="1"/>
    <div class="x-clear-icon" id="ext-element-939"/></div>
    <div class="x-field-mask" style="display: none !important;" id="ext-element-938"/></div>
    </div>
编辑2:元素=driver.findElement(By.xpath(“//span[contains(text(),'volume')]/following::input[1]);不能解决这种情况,因为根据DOM结构,它不完全是以下输入。请参考示例图以显示我要选择的元素的GUI位置:

我的目标是单击它旁边的输入框

要选择以下输入(忽略任何
div
structure)元素,可以使用:

//span[contains(text(),'Volume')]/following::input
该步骤将选择第一个位置步骤中选择的
span
之后的零个或多个
input
元素。如果只需要下一个输入,请使用:

//span[contains(text(),'Volume')]/following::input[1]

你能更好地解释一下你到底想选择什么(一个
div
?哪一个?)并包含一部分正确显示上下文的代码吗?(你发布的代码片段令人困惑,不清楚你的
span
与以下代码的关系。选择
span
的标准是什么?(是否为空字符串?)和div(是否为子项?是否为兄弟项?@helderdarocha我已将我的问题编辑为包含代码片段。您只需要以下输入?您可以使用:
//span[contains(text(),'Volume')]/以下::input
感谢您的解决方案。这并没有改善我的情况。我已更新了我的问题,以包含更详细的解释。它似乎是您发布的示例中唯一的输入。它是您要选择的输入还是div?您可以使用:
//span[contains]获取该输入的父级
div
(text(),'Volume')]/following::input[1]/parent::div
我想选择输入。我发布的XPath表达式在您发布的代码示例中使用
id=“ext-element-937”
选择输入(并且没有使用
ext-input-115
//span[contains(text(),'Volume')]/following::input
//span[contains(text(),'Volume')]/following::input[1]