无法从CheckOut表中找到Element

时间:2017-06-08 20:22:12

标签: java selenium xpath

我找不到元素。我希望从元素getText()然后将其转换为浮点并计算。但是,似乎无法找到元素。

String unitPrice = driver.findElement(By.cssSelector(".price")).getText();
        //By.xpath(".//*[@id='product_1_1_0_0']/td[4]")).getText();
String unit = driver.findElement(By.cssSelector(".cart_quantity_input.form-control.grey")).getText();
        //By.xpath(".//*[@id='product_1_1_0_0']/td[5]/input[2]")).getText();
String totalPrice = driver.findElement(By.cssSelector("#total_product_price_1_1_0")).getText();
        //By.xpath(".//*[@id='total_product_price_1_1_0']")).getText();

float unitPriceF = Float.parseFloat(unitPrice);
float unitF = Float.parseFloat(unit);
float TotalPriceF = Float.parseFloat(totalPrice);

我已经尝试了xPath和cssSelector,但在这两种情况下都得到了相同的错误:

  

没有这样的元素:无法找到元素:{“method”:“css   选择”, “选择器”: “#total_product_price_1_1_0”}(..)

这是HTML结构:

<div id="order-detail-content" class="table_block table-responsive">
<table id="cart_summary" class="table table-bordered stock-management-on">
<thead>
<tr>
<th class="cart_product first_item">Product</th>
<th class="cart_description item">Description</th>
<th class="cart_avail item">Avail.</th>
<th class="cart_unit item">Unit price</th>
<th class="cart_quantity item">Qty</th>
<th class="cart_total item">Total</th>
<th class="cart_delete last_item"> </th>
</tr>
</thead>
<tfoot>
<tr class="cart_total_price">
<td id="cart_voucher" class="cart_voucher" rowspan="3" colspan="3"> </td>
<td class="text-right" colspan="3">Total products</td>
<td id="total_product" class="price" colspan="2">$39.51</td>
</tr>
<tr style="display: none;">
<tr class="cart_total_delivery">
<tr class="cart_total_voucher" style="display:none">
<tr class="cart_total_price">
</tfoot>
<tbody>
<tr id="product_1_1_0_0" class="cart_item last_item first_item address_0 odd">
<td class="cart_product">
<td class="cart_description">
<td class="cart_avail">
<td class="cart_unit" data-title="Unit price">
<span id="product_price_1_1_0" class="price">
<span class="price">$39.51</span>
</span>
</td>
<td class="cart_quantity text-center">
<td class="cart_total" data-title="Total">
<td class="cart_delete text-center" data-title="Delete">
</tr>
</tbody>
</table>
</div>

3 个答案:

答案 0 :(得分:1)

尝试选择包含所需文本的元素:

String price = driver.findElement(By.cssSelector("#product_1_1_0_0 > td:nth-child(4) > span > span")).getText();

enter image description here

这应该有用,只要ID #product_1_1_0_0不是动态的。你的元素未找到异常会让我相信它是动态的。如果是这种情况,请忽略该ID并使用选择器向上层次结构:

"#cart_summary > table > tbody > tr > td:nth-child(4) > span > span"

修改

我刚注意到了id =&#34; product_price_1_1_0&#34;在第一个跨度上,你可以这样做:

"#product_price_1_1_0 > span"

答案 1 :(得分:1)

首先从表中获取行:

 List <WebElement> rows = driver.findElements(By.tagName("tr"));

使用行号获取行中的单元格:

 String unitPrice= rows.get(1).findElement(By.cssSelector(".price")).getText();

以上行会返回字符串 $39.51 ,因为 $ 符号,您无法将其直接转换为float。在转换为float

之前拆分字符串

答案 2 :(得分:1)

要先获得价格,请找到包含其ID的行。我们的价格在该行的span标签中。现在,将这些span标记元素放入&#34; List&#34;,我们的价格在第二个span元素中。所以,获取该元素并使用&#34; .getText()&#34;获取数据。

     WebElement row = driver.findElement(By.id("product_1_1_0_0"));
     List<WebElement> span = row.findElements(By.tagName("span"));
     String totalPrice = span.get(1).getText();