簡體   English   中英

xpath 的名稱在 Selenium 和 Java 中無法正常工作

[英]Name of xpath not working properly in Selenium and Java

我得到了這個“編輯”按鈕,它允許我編輯網格中的特定行

在此處輸入圖像描述

那個編輯按鈕有這個:

<a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="https://randompageee/backend/company/index/edit/id/967/key/ee96a07876ee1fbef91d5d22dfjrrfkjaf9d40/">Edit</a>

它的 XPATH 是:

//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]/a

我在我的代碼中使用了這個:

WebElement  elementProd = driver.findElement(By.xpath("//*[@id=\"container\"]/div/div[2]/div[1]/div[5]/div/div/button[2]"));
JavascriptExecutor executor  = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();",elementProd);

問題是它有時有效,但有時無效。

XPATH 有什么問題嗎? 我應該改用其他嗎?


編輯: 在此處輸入圖像描述

它有這個:

<td data-bind="css: getFieldClass($row()), click: getFieldHandler($row()), template: getBody()" class="data-grid-actions-cell">
<!-- ko if: $col.isSingle($row()._rowIndex) --><!-- ko repeat: {foreach: $col.getVisibleActions($row()._rowIndex), item: '$action'} --><a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="randomdfsd/backend/company/index/edit/id/967/key/ee96a07876ee1fbef91d5d22507d5882e9f03b78dasb24657d3ce9d40/">Edit</a><!-- /ko --><!-- /ko -->

<!-- ko if: $col.isMultiple($row()._rowIndex) --><!-- /ko -->
</td>

它的 XPATH 是:

//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]

另一方面,我得到了這個:

在此處輸入圖像描述

它包含:

<a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="https://randomdfsd/backend/company/index/edit/id/967/key/ee9ds1d5d22507d5882e9f03b78fca79514fab24657d3ce9d40/">Edit</a>

它的 XPATH 是:

//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]/a

Selenium Webdriver 識別單個 tr(行)或 td(行/列組合)的最佳方法是讓網站的開發人員(您正在測試)在動態生成表格時在這些標簽中放置一個唯一的 id 這樣如下(參見參考文獻#1)。 然后使用該 id(參見參考文獻 #2)而不是使用 XPath 獲取表格的行或單元格。 如果在 tr 或 td 下有嵌入的標簽,那么在這之后使用 XPath 是安全的,因為元素的 HTML 層次結構的起始位置是固定的(參見參考文獻 #3)。

參考#1:

<table><tr><td id="table1_row1_column1"><a>link</a></td></tr></table>

參考#2:

WebElement elementTableTd = driver.findElement(By.id("table1_row1_column1"));

參考#3:

WebElement elementTableA = driver.findElement(By.xpath("//*[@id=\"table1_row1_column1\"]/a"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM