XPATH - getAttribute() 和 writer.append() 到 CSV 文件 (Selenium/Selenide)

XPATH - getAttribute() and writer.append() to CSV file (Selenium/Selenide)

我正在尝试获取 "title" 属性值并将其保存在以下元素的 csv 文件中:

<img src="images/i.png" title="Uwagi: łacina, nieczytelne
Data urodzenia: 25.02.1808 r.">

整个htmlhere。

我使用下面的 xpath 获得了这个属性值(有效):

SelenideElement uwagi = $(By.xpath("//div[@id='table_b_wrapper']//table[@id='table_b']//tbody//tr[1]//img[contains(@title,'Uwagi')]"));  
//tr[1] is just a one example from this table. xpath is ok

然后我尝试将其放入我的 csv 文件中:

writer.append(uwagi+";");  //using ; as separator

问题是这个值“Uwagi: łacina, nieczytelne urodzenia 数据:25.02.1808 r.

它分为 2 个部分,它们分别保存为单独的单元格,例如 here

我需要一个单元格中的所有这些值(即 J1731 和 A1732 值应为 1 个单元格)。 我做的时候有什么奇怪的 System.out.println(uwagi.getAttribute("title")); 控制台中仅显示属性值的第二部分(数据 urodzenia:25.02.1808 r.)。 如何将此标题属性值保存为 csv 中的一个单元格?

问候 大部头

从标题中删除换行符,根据您共享的 html,下面的代码将 \n(换行符)替换为一个 space。 同样在 Selenide 中,您可以使用 $x 作为 xpath 选择器:

SelenideElement uwagi = $x("//table[@id='table_b']//tr[@role='row'][1]//img[contains(@title,'Uwagi')]");

//using css selector
uwagi = $("#table_b tr[role='row'] img[title^='Uwagi']");
//or even shorter
uwagi = $("#table_b img[title^='Uwagi']");

String uwagiTitle = uwagi.text().replace("\n", " ");

writer.append(uwagiTitle+";");

我找到了解决方案。我改变了:

FileWriter writer = new FileWriter(pathString, Charset.forName("Cp1250"));

CsvWriter writer = new CsvWriter(pathString, ';', Charset.forName("Cp1250"));

同时使用:

    <dependency>
        <groupId>net.sourceforge.javacsv</groupId>
        <artifactId>javacsv</artifactId>
        <version>2.0</version>
    </dependency>

基于以下信息:link

然后我把writer.apend改成了writer.write.

其他同:

...
    SelenideElement xxx = $x("//img[contains(@title,'Uwagi')]"); 
    String str = xxx.getAttribute("title");
    writer.write(str);
...

结果:picture

问候 大部头