Java 使用xpath轴在Selenium中遍历DOM
我正在为动态网页编写Selenium测试。在这段代码中,我从excel表格中读取并检查元素是否存在于给定的网页中。我已将代码的重要部分标记为注释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**>>
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]