【问题标题】:Selenium to read the content from websiteSelenium 从网站读取内容
【发布时间】:2013-08-05 22:54:43
【问题描述】:

我在网页中有一些这样的内容。

 Appname       Description      Price     Part Number      Validity
 App1           some desc1     25         JH32            30
 App2           some desc2     250        PB36            180
 App2           some desc3     20         QL76            10
 App3           some desc4     50         KQ3J            30

我的应用程序就像在启动应用程序后,用户将输入一个应用程序名称,selenium 将在此站点中搜索该特定应用程序名称。除了这一步,我想要的是:

无论我搜索什么应用程序名称,selenium 都必须检索与该字段对应的值,例如 selenium 应该检索价格、有效性和零件编号字段的值。我尝试 selenium 通过使用类名、标记名、id 等属性来检索值。但是所有字段对于这些字段中的每一个都具有相同的属性,这使得 selenium 难以选择字段。

我唯一能找到不同的是内部文本,我不能在这里使用它,因为我无法预测用户会在我的应用程序开始时在搜索框中给出什么作为 appname。

我的示例 html 代码,在我单击站点中的字段(价格)后得到。我为此使用了萤火虫。我正在使用 Firefox 浏览器进行 selenium..

<td height="100%" class="ms-vb-title"><table height="100%" cellspacing="0" surl="" uis="512" cid="0x0100DFF86ACBE51BE549AA56639FCC32D7E0" ctype="Item" ms="0" csrc="" hcd="" couid="" otype="0" icon="icgen.gif||" ext="" type="" perm="0x1b03c4312ef" dref="sites/SoftwareDev/IAG/IAS/Lists/Unify Parts" url="/sites/SoftwareDev/IAG/IAS/Lists/Unify%20Parts/27_.000" id="27" ctxname="ctx1" onmouseover="OnItem(this)" class="ms-unselectedtitle"><tbody><tr><td width="100%" class="ms-vb"><a target="_self" onclick="GoToLink(this);return false;" href="/sites/SoftwareDev/IAG/IAS/Lists/Unify%20Parts/DispForm.aspx?ID=27" onfocus="OnLink(this)">MindMeister - 251-500 Pupil License<img height="1" border="0" width="1" alt="Use SHIFT+ENTER to open the menu (new window)." class="ms-hidden" src="/_layouts/images/blank.gif"></a></td><td><img width="13" alt="" style="visibility:hidden" src="/_layouts/images/blank.gif"></td></tr></tbody></table></td>

我怎样才能实现我所说的?任何 cmets 将不胜感激..

【问题讨论】:

  • 只要找到appname所在的行,解析tr元素?
  • 能否请您给我看一个示例,说明我该怎么做?我无法关注您..抱歉
  • 你说过你试过了。那么你有什么尝试?你已经运行了哪些代码?这是针对什么 HTML 运行的?
  • 我的意思是如何解析元素?我尝试过使用类名、id、标记名等查找该字段,不幸的是,这对每个字段都不是唯一的..
  • 您需要帮助我们来帮助您。提供正在运行的 HTML(整个表格)您当前使用的确切代码。

标签: c# selenium


【解决方案1】:

如果没有看到 HTML 或您的代码,我会假设您提供的表格是以有序的&lt;table&gt;&lt;tr&gt;&lt;td&gt;...&lt;/td&gt;&lt;td&gt;...&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; 形式设置的。在这种假设下,您可以只使用您已经使用的代码来查找应用程序名称,然后使用 webdriver 的 Xpath/Jquery(基于您使用的浏览器)定位功能通过&lt;td&gt; index 找到适当的数据值在 &lt;tr&gt; 中,您发现 appname 元素是其子元素。 当您“选择”了元素后,只需返回标签值并将其保存在代码中的变量中。

【讨论】:

  • 请在我的问题中查看我的 html 代码示例。感谢您的回复。预计会有更多 cmets...
  • 如果用户要输入他们希望从中获取信息的应用程序名称,为什么不将其存储为变量,将应用程序名称连接到 XPath 的字符串中并通过以下方式运行它:驱动程序.findelement(by.XPath(xpathString));要获取数据值,只需使用 xpath 查找应用程序名称行,然后使用该行中每个 的索引来定位描述和价格等值。
【解决方案2】:

如果您只需要应用名称,那么您需要这样做:

  1. 识别作为表格单元格 (td) 的 WebElement,其中包含应用程序名称。
  2. 使用相对 xpath 来识别下一个表格单元格。
  3. 从该表格单元格中提取文本。
  4. 在整行中重复步骤 2-3。

以下是一些简化的 webdriver 代码,用于展示其工作原理:

WebElement td_appname = driver.findElement.ByLinkText("MindMeister - 251-500 Pupil License");
WebElement td_appdescription = td_appname.findElement.Byxpath("./../td[2]");
String appdescription = td_appdescription.getText();

这里,关键是第三行代码的xpath。这只适用于非常简单的表结构(table/tbody/tr/td);但是您的要复杂得多,因此您需要为您的网站结构制定适当的相对 xpath。我建议使用良好的浏览器开发工具(例如在 firefox 上,使用 firebug 和 firepath)仔细查看 DOM 树并找出从一个单元格到下一个单元格需要什么样的 xpath。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2013-06-15
    • 2021-02-01
    • 1970-01-01
    • 2012-05-22
    • 2015-06-01
    • 1970-01-01
    • 2021-01-06
    • 2013-04-21
    相关资源
    最近更新 更多