【问题标题】:How to target a input box with selenium when the ID changes?ID更改时如何用selenium定位输入框?
【发布时间】:2013-07-24 20:10:31
【问题描述】:

尝试自动化处理 Yammer 的某些测试。我想要做的是使用 selenium 发布一些东西,但是当我点击文本框时,它会改变它的 id。此外,每次页面重新加载或发布帖子时,该文本框都会更改其 ID。

所以我接下来要做的是通过告诉 selenium 查找来使用通配符

//input[starts-with(id, 'yamjs')]

但是,我很快发现 yamjs 用于更新正文以及“+ 添加人员以通知”文本框。

两者之间的区别似乎是类。我们感兴趣的是class="yj-tapf-textarea",而添加人员通知文本框有class="yj-callout-bar-entry-field"

如何让 selenium 在 yj-tapf-textarea 类中找到 id 以 yamjs 开头的输入字段,而不是 yj-callout-bar-entry-field 类中的输入字段?

【问题讨论】:

  • 无论输入的 ids/class 名称如何,页面(或表单)的结构是否始终保持不变?
  • 没有。看起来 yj-callout-bar-entry-field 只有在您单击 yj-tapf-textarea 后才会出现。
  • 您是否尝试过将class="yj-tapf-textarea" 中的内容存储在变量中并在该变量中搜索您想要的输入?
  • 没有。我该怎么做呢?
  • 在 python 中:myclass = browser.find_element_by_class('yj-tapf-textarea') myclass.find('input') 这将返回一个列表,然后您可以遍历该列表直到找到您想要的列表(作为测试进行迭代,当您知道哪个时删除迭代您需要的输入)。希望我说得通。

标签: javascript selenium yammer


【解决方案1】:

似乎我对课程及其位置的关注不够。这是我最终得到的结果:

driver.findElement(By.className("yj-auto-width-fake-textarea")).click();
driver.findElement(By.className("yj-tapf-textarea")).sendKeys(Text);
driver.findElement(By.id("yj-yam.ui.publisher.old.SubmitButton")).click();

【讨论】:

    【解决方案2】:

    如果 id 发生变化,那么可能是不使用 id 作为定位器的提示。

    使用 CssSelectors 和 XPath 可以为您提供更稳定可靠的定位器

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 2013-09-04
      • 2019-04-03
      • 1970-01-01
      • 2020-12-26
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多