【问题标题】:Extract text from element within an input class从输入类中的元素中提取文本
【发布时间】:2017-02-22 13:19:05
【问题描述】:

所以我目前正在使用 C# 和 Selenium 在 Visual Studio 中测试自动化。所以我的问题如下。我要从中提取文本的元素是:

<input class="showroomprice pricehistory" type="text" data-showroomprice="100000" value="100.000" data-tooltip="true" data-html="true" data-original-title="<div class=&quot;price-history-popup&quot;>
<table>
    <thead>
        <tr>
            <th>
                Datum
            </th>
            <th>
                Showroom
            </th>
        </tr>
    </thead>
    <tr>
        <td>
            22 feb 2017
        </td>
        <td>
            € 100.000
        </td>
    </tr>
    <tr>
        <td>
            27 jul 2016
        </td>
        <td>
            € 399.999
        </td>
    </tr>
    <tr>
        <td>
            20 jan 2016
        </td>
        <td>
            € 333.333
        </td>
    </tr>
    <tr>
        <td>
            20 jan 2016
        </td>
        <td>
            € 123
        </td>
    </tr>
    <tr>
        <td>
            20 jan 2016
        </td>
        <td>
            € 12.333
        </td>
    </tr>
</table>
</div>">

现在你可以看到,div 和 table 是输入类的一部分(参见最后一行 div 后面的 ">)。当我按类 showroomprice pricehistory 查找元素并尝试获取文本时,我得到一个 null返回值。我也无法通过 div 类定位元素。

所以我需要的是,我需要创建一个包含表中记录的所有文本的字符串。有什么想法吗?

谢谢!

【问题讨论】:

  • 您要从中提取文本的元素是什么? inputtable?
  • 渲染的 HTML 是否真的如上所示,在输入 original-data-title 属性中以字符串形式显示 div + 表?

标签: c# selenium


【解决方案1】:

编写一个循环来连接所有单元格中的文本,示例 java 代码

import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;

public class WebTableExample 
{
    public static void main(String[] args) 
    {
        WebDriver driver = new InternetExplorerDriver();
        driver.get("test url");      
        string tableText;
        WebElement table_element = driver.findElement(By.id("yourtable id"));
        List<WebElement> tr_collection=table_element.findElements(By.xpath("id('testTable')/tbody/tr"));

        int row_num,col_num;
        row_num=1;
        for(WebElement trElement : tr_collection)
        {
            List<WebElement> td_collection=trElement.findElements(By.xpath("td"));

            col_num=1;
            for(WebElement tdElement : td_collection)
            {
             // making all cells text to tableText
                tableText = tableText + tdElement.getText();

                col_num++;
            }
            row_num++;
        } 
    }
}

【讨论】:

  • 我认为这行不通,因为该表实际上是字符串的一部分,作为inputdata-original-title 属性的一部分
  • 这种情况更简单,提取属性值,将所有TD、TR标签替换为空白
猜你喜欢
  • 2021-12-20
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2018-08-09
  • 1970-01-01
  • 2021-07-16
相关资源
最近更新 更多