【问题标题】:Finding all the subject fields in a table with javascript using selenium使用 selenium 使用 javascript 查找表中的所有主题字段
【发布时间】:2016-02-05 17:16:52
【问题描述】:

我有一个已发送的消息列表,我想打印所有消息 - 主题字段。我正在使用 selenium 并使用 javascript(不是 JAVA)来编写代码。

代码是:

<table class="messages">
    <tbody><tr class="section-heading">
      <th>
        <span class="screenreader-only">Delete</span>
      </th>
        <th>To</th>
        <th>Subject</th>
        <th>Sent</th>
    </tr>
  <tr role="row" id="message-k-s-10043496" tabindex="0" class="message"><td class="mark-for-delete keep-column">
  <div class="mark-container">
    <input type="checkbox" class="select-message" title="message-selection">
  </div>
</td>

<td class="message-metadata to">
  NKPContactMbrSvcs
</td>

<td class="message-metadata bottom">
  <div class="from mobile-only">
    From:  <span class="name">Sherlock Robin</span>
  </div>

  <div class="subject">
    Other Questions and Comments
  </div>

  <div class="from desktop-only">
    From:  <span class="name">Sherlock Robin</span>
  </div>
</td>

<td class="message-metadata keep-column">
  <div class="date-received">4:54 PM</div>

</td>

Image for sent list

屏幕上最多显示 10 个列表项。

【问题讨论】:

  • 您尝试了哪些方法,结果如何?就像你在学校做的那样……请展示你的作品。 :) 这是在 SO 上回答问题的过程的一部分。它对您很有帮助,因为它迫使您调查自己的问题并仔细考虑。它还向读者证明你做了功课,并做出了合理的尝试来回答你自己的问题。第三,它可以帮助读者发现和诊断问题,从而为您提供更好的答案,减少我们浪费的时间。
  • 嘿杰夫,我试过 $('.messages tr .message') 但它只打印列表中的第一条消息。当我尝试 $('.messages tr:nth-child(2) .message') 时,我得到了列表中的第三行。

标签: javascript list selenium filter


【解决方案1】:

邮件主题字段如下所示

<div class="subject">

所以你想要的是 CSS 选择器div.subject。我不使用 javascript/selenium 但我认为你想要的是

browser.findElements(webdriver.By.css('div.subject'))

这至少应该为您指明正确的方向。

【讨论】:

  • 我只得到第一个消息主题,但我想得到所有 10 个消息主题字段。
  • 您需要发布您正在使用的代码。如果循环正确,这应该可以工作。
【解决方案2】:

当您创建如此多相互关联的变量时,最好使用 JSON 将它们混杂到同一个变量中,例如您可能有

function register(username, password) {
Users = Users + 1;
userList['_' + Users] = {
    Username: username,
    password: password,
};

这允许您使用诸如 userList._1.username 之类的东西来访问基于用户名的变量 相同的概念可以应用于您的问题,其中您有一个要用于识别电子邮件的基本值。这方面的一个例子可能是

email = {}
email[time] = {
    subject: subject,
    sender: sender,
    recipient: recipient,
    body: body
}

此代码可能需要如此摆弄,您可以将其打包成一个函数来创建

function email(sender, recipient, subject, body) {
    email = {}
    email[time] = {
        subject: subject,
        sender: sender,
        recipient: recipient,
        body: body
    }
}

然后你就可以使用了

document.getElementById("HTMLid").innerHTML = email.(your time value).subject

你的 html 显示类似的东西

<p id="HTMLid"></p>

【讨论】:

  • 这并不能真正回答问题,但确实包含有价值的建议。我肯定会推荐使用 javascript 对象文字来存储类似的数据......例如,特定电子邮件上的所有数据。虽然它们看起来相同 JSON 和对象文字(您在答案中称为 JSON)但并不相同。请阅读此SO Q&A 了解更多信息。
  • 还有一件事……如果您使用时间价值作为索引,您将会遇到问题。没有什么可说的,两封电子邮件不会同时收到并且具有相同的时间戳。这会给您的存储方法带来麻烦。您可以通过在每次的末尾附加一个索引来区分它们来解决这个问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2023-03-06
  • 2011-04-06
  • 2017-08-09
  • 2021-02-14
  • 2014-05-28
相关资源
最近更新 更多