Html 在具有相同地址位置的XPATH中查找相同的文本

Html 在具有相同地址位置的XPATH中查找相同的文本,html,xml,selenium,search,xpath,Html,Xml,Selenium,Search,Xpath,虽然这些信息无助于解决我的问题,但我会让大家知道我正在使用SeleniumWebDriver在Python中创建自动化测试 我有一个问题,我想验证两个相同的文本元素是否存在,它们似乎具有相同的XPATH地址。从下面网页的XPATH中可以看到 <div class="pagebox"> <h2>Database</h2> Restrict access to group: <input id="database_group" name="dat

虽然这些信息无助于解决我的问题,但我会让大家知道我正在使用SeleniumWebDriver在Python中创建自动化测试

我有一个问题,我想验证两个相同的文本元素是否存在,它们似乎具有相同的XPATH地址。从下面网页的XPATH中可以看到

<div class="pagebox">
   <h2>Database</h2>
   Restrict access to group: <input id="database_group" name="database_group" value="postgres" type="text">
   <br></br>
   <h2>Sessions</h2>
    User sessions time out after 
   <input id="session_timeout" name="session_timeout" maxlength="5" value="1200" type="text">
    minutes.
   <br></br>
   <h2>HMI</h2>
   <input id="use_large_header_text" name="use_large_header_text" type="checkbox">
    Use large text in the header bar and link bar on HMI
   <br></br>
   <input id="display_tagging_button" name="display_tagging_button" checked="true" type="checkbox">
    Display tagging button and information in HMI control dialog
   <br></br>
   <br></br>
   <h2>Inactive Redirect</h2>
    Auto redirect after user is inactive for 
   <input id="inactive_time" name="inactive_time" maxlength="4" placeholder="Min: 0 (Default) Max: 1440" size="25" value="0" type="text"></input>
    minutes. 
   <span id="ieInactTime" style="font-style: italic"> Min: 0 (Default) Max: 1440</span>
   <br></br>
    Redirect Address: 
   <input id="inactive_page" name="inactive_page" placeholder="File Path e.g. /Home/" size="30" value="" type="text"><span id="ieInactPage" style="font-style: italic"> File Path e.g. /Home/</span>
   <br></br>
我试图用括号来区分这两个文本元素,以表示我要验证的文本元素

e.g. //div[@class='pagebox']/[1] & //div[@class='pagebox']/[2]
…但那没用

我能找到的最接近区分这两个文本元素的方法是使用XPATH的“text()”特性

//div[@class='pagebox']/text()[contains(.,'minutes')][1]

//div[@class='pagebox']/text()[contains(.,'minutes')][2]

有没有办法使用XPATH验证这两个文本元素?

您可以使用JavaScriptExecutor在元素div中查找文本节点。请参阅下面的C代码:

IWebElement e = driver.FindElement(By.ClassName("pagebox"));
string script = "var nodes = arguments[0].childNodes;" +
    "var text = [];" +
    "var count=0;" +
    "for (var i = 0; i < nodes.length; i++) {" +
    "    if ((nodes[i].nodeType == Node.TEXT_NODE) && (nodes[i].textContent.trim()=='minutes.')) {" +                
    "        text[count]= nodes[i].textContent.trim();" +
    "        count++;" +
    "    }" +
    "}" +
    "return text;";
Object obj = ((IJavaScriptExecutor)driver).ExecuteScript(script,e);
IWebElement e=driver.FindElement(By.ClassName(“pagebox”);
string script=“var nodes=参数[0]。childNodes;”+
“变量文本=[];”+
“变量计数=0;”+
“对于(var i=0;i
您可以使用JavaScriptExecutor查找元素div中的文本节点。请参阅下面的C#代码:

IWebElement e = driver.FindElement(By.ClassName("pagebox"));
string script = "var nodes = arguments[0].childNodes;" +
    "var text = [];" +
    "var count=0;" +
    "for (var i = 0; i < nodes.length; i++) {" +
    "    if ((nodes[i].nodeType == Node.TEXT_NODE) && (nodes[i].textContent.trim()=='minutes.')) {" +                
    "        text[count]= nodes[i].textContent.trim();" +
    "        count++;" +
    "    }" +
    "}" +
    "return text;";
Object obj = ((IJavaScriptExecutor)driver).ExecuteScript(script,e);
IWebElement e=driver.FindElement(By.ClassName(“pagebox”);
string script=“var nodes=参数[0]。childNodes;”+
“变量文本=[];”+
“变量计数=0;”+
“对于(var i=0;i
要区分两个不同的文本元素“分钟”。需要以下XPATH:

对于第一个“分钟”。
//div[@class='pagebox'][text()[contains(,'minutes')][1]


对于第二个“分钟”。
//div[@class='pagebox'][text()[包含(,'minutes')][2]
要区分两个不同的文本元素“分钟”。,需要以下XPATH:

对于第一个“分钟”。
//div[@class='pagebox'][text()[contains(,'minutes')][1]


对于第二个“分钟”。
//div[@class='pagebox'][text()[contains(,'minutes')][2]

您可以在inspector中将每个“minutes”字符串重命名为minutes\u X。应该更容易找到您要查找的内容。在示例代码中,
//div[@class='pagebox']/input[2]
是“在HMI的标题栏和链接栏中使用大文本”。使用
input[n]
是区分它们的方法。你在问什么?@KevinS重命名“分钟”。不幸的是,字符串不是一个选项。这就是我一直坚持的方案&必须找到一种方法使其工作。@SiKing我的示例代码只是一个示例,不能从字面上理解。我的示例代码只不过是一个示例,说明了人们通常如何区分两个相同的字符串,但是,这种情况不适合我的情况。我将更改该示例以消除任何混淆。仍然不清楚您在问什么!你能用简单的英语描述一下你想如何区分它们吗?你可以在你的inspector中将每个“minutes”字符串重命名为minutes_X。应该更容易找到您要查找的内容。在示例代码中,
//div[@class='pagebox']/input[2]
是“在HMI的标题栏和链接栏中使用大文本”。使用
input[n]
是区分它们的方法。你在问什么?@KevinS重命名“分钟”。不幸的是,字符串不是一个选项。这就是我一直坚持的方案&必须找到一种方法使其工作。@SiKing我的示例代码只是一个示例,不能从字面上理解。我的示例代码只不过是一个示例,说明了人们通常如何区分两个相同的字符串,但是,这种情况不适合我的情况。我将更改该示例以消除任何混淆。仍然不清楚您在问什么!你能用简单的英语描述一下你想如何区分它们吗?