0

这两个按钮的 ID 几乎相似(ID 上的数字可能会改变,因此不可靠) 两者都有相同的类 它们都位于同一个父级下 除了跨度没有什么不同

我试图在 Using Selenium 上定位和构建事件的应用程序的所有 UI 元素都类似于下面的部分......

谁能建议我如何使用 xpath 找到这些按钮?

<div id="button-1749" class="x-btn x-box-item x-toolbar-item x-btn-default-toolbar-  small x-noicon x-btn-noicon x-btn-default-toolbar-small-noicon x-item-disabled x-disabled x-btn-disabled x-btn-default-toolbar-small-disabled" style="margin: 0pt; left: 1563px; top: 0px;">
<em id="button-1749-btnWrap" class="">
<button id="button-1749-btnEl" class="x-btn-center" autocomplete="off" role="button"    hidefocus="true" type="button" aria-disabled="true" disabled="">
<span id="button-1749-btnInnerEl" class="x-btn-inner" style="">Delete Selected</span>
<span id="button-1749-btnIconEl" class="x-btn-icon x-hide-display">&nbsp;</span>
</button>
</em>
</div>
<div id="button-1750" class="x-btn x-box-item x-toolbar-item x-btn-default-toolbar-small x-noicon x-btn-noicon x-btn-default-toolbar-small-noicon" style="margin: 0pt; left: 1654px; top: 0px;">
<em id="button-1750-btnWrap" class="">
<button id="button-1750-btnEl" class="x-btn-center" autocomplete="off" role="button"    tabindex="1" hidefocus="true" type="button">
<span id="button-1750-btnInnerEl" class="x-btn-inner" style="">New Title</span>
<span id="button-1750-btnIconEl" class="x-btn-icon x-hide-display">&nbsp;</span>
</button>
</em>
</div>
4

5 回答 5

0

我认为这应该适用于您的情况:

locator = driver.find_element_by_xpath("//div/em/button/span[contains(text(),'Delete Selected')]")

如果是另一个元素,您可以执行类似的方法。

于 2012-04-12T01:51:37.603 回答
0

如果要查找特定 div 下的元素,可以使用descendentaxis.

例子:

//div[@id='your div']/descendant::button[contains(@class, 'x-btn-center')]/span[text()='Delete Selected']"      

这将为您提供 id 为“您的 div”的 div 中的已删除选定按钮。

于 2012-04-12T01:03:00.067 回答
0

您还可以使用 GetElements(与 GetElement 相反),这将返回与您的搜索条件匹配的元素列表。然后,如果按钮出现在页面上的顺序永远不会改变,您可以使用此列表通过使用关联的索引每次访问您想要的按钮。

例如。

ReadOnlyCollection<IWebElement> buttons = driver.FindElements(By.XPath("YOUR XPATH HERE"));
//If it's the 3rd button that matches your criteria
buttons[2].Click(); //or whatever you want with this button :)
于 2012-04-11T23:58:29.130 回答
0

尽管根据您的问题,xpath 是所需的定位器,但 xpath 和 css 选择器之间存在速度差异,这是一个示例:http ://saucelabs.com/blog/index.php/2011/05/why-css-locators-are -the-way-to-go-vs-xpath/。要通过 css 选择器定位这些元素,请使用以下 python 示例

els = driver.find_elements_by_css_selector("button[id^=button]
for eachel in els:
   eachel.click()
于 2012-04-12T02:20:22.193 回答
0

如果 2 个元素的 xpath 相同,则必须创建自己的 xpath

driver.findElement(By.xpath("//span[contains(text),'New Title')]")).click;
于 2016-05-18T17:38:42.227 回答