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

问题描述:

虽然此信息无助于解决我的问题,但我会让它知道我正在使用Selenium WebDriver在Python中创建自动化测试。查找具有相同地址位置的XPATH中的相同文本

我有一个问题,我想验证两个相同的文本元素,看起来有相同的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> 

...短语“分钟”。显示了两次[第8行和第21行],但它没有以我可以使用元素的XPATH定位我想验证哪个元素的方式显示,因为我通常会使用您会发现的方法hereherehere。这两个文本元素似乎有相同的确切地址XPATH:

//div[@class='pagebox'] 

我试着用括号来表示两个文本元素之间的区分,我想验证哪些文本元素...

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验证这两个文本元素吗?

+0

您可以在检查器中将每个“分钟”字符串重命名为minutes_X。应该更容易找到你正在寻找的那个。 –

+1

在您的示例代码中,// // div [@ class ='pagebox']/input [2]'是“在HMI上的标题栏和链接栏中使用大文本”。使用'input [n]'是你如何区分它们。你在问什么? – SiKing

+0

@KevinS重命名“分钟”。不幸的是,字符串不是一种选择。这是我坚持不懈的方案,必须找到一种方法来实现它。 – rwbyrd

要在两个不同的文本元素区分“分钟”。,您需要以下XPATH:

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

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

您可以使用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);