Selenium:如何在标签中获取文本,然后单击它的兄弟姐妹的Javascript链接?

时间:2016-06-20 09:25:00

标签: python html selenium

我有一个需要逐个编辑的表单列表,其中我必须首先识别表单标题,然后单击JavaScript链接以打开它的编辑模板。

在下面的示例代码中,我需要标识作为表单标题的文本Another Custom Form (Mobile),然后点击a href值为onclick的{​​{1}}链接。这是形式标题的第二个兄弟。我正在尝试用Python执行此任务。



editProjectFormType




到目前为止,我使用了以下不完整的代码,不知道下一步该做什么

<tr class="trbg2">
  <td width="10%" align="left" nowrap="nowrap">
    <div align="center">
      <input type="checkbox" name="selectedFormType" value="2192454$$rmymiK" checked="checked">
    </div>
  </td>
  <td width="10%" align="left" nowrap="nowrap"><img src="https://dmsak.qa.asite.com/images/dots.gif" width="6" height="15">!!!!!!!!!!!!!!!!!!!!!!!!!!!!Ashish_test!!!!!!!!!!</td>
  <td width="10%" align="left">Custom forms</td>
  <td width="10%" align="center">ACFM</td>
  <td width="24%">Another Custom Form (Mobile)</td>
  <td width="20%">Custom</td>
  <td align="center" width="15%">
    <a href="javascript:void(0);" onclick="editProjectFormType('2192454$$rmymiK');">
      <img src="https://dmsak.qa.asite.com/images/i_editfgt.gif" width="16" height="20" border="0">
    </a>
  </td>
  <td align="center" width="15%">
    <a href="javascript:void(0);" onclick="downloadFormTemplate('2192454$$rmymiK');">
      <img src="https://dmsak.qa.asite.com/images/f_dow_tmple.gif" width="22" height="22" border="0" alt="Click here to Download Template" title="Click here to Download Template">
    </a>
  </td>
</tr>

3 个答案:

答案 0 :(得分:1)

我会通过以下方式来解决这个问题:

    1. 创建一个类来表示此表中的行,例如“MyRow”,它具有与每个列作为字段中的字段进行交互的方法。
    1. 使用Selenium查找表中的所有行,返回此类实例的列表。
    1. 循环遍历列表,查找与目标名称匹配的行:
    2. for (MyRow myRow : allRows) {
          if (myRow.name.equals("Another Custom Form (Mobile)")) {
              return myRow;
          }
      }
      
      1. 点击目标行列中的链接。 myRow.editProjectForm()

答案 1 :(得分:1)

您可以使用以下单link点击xPath点击Another Custom Form (Mobile),您可以在其中提供文字following-sibling以识别他们的link并获取link = browser.find_element_by_xpath("//td[contains(text(),'Another Custom Form (Mobile)')]/following-sibling::td/a[contains(@onclick, 'editProjectFormType')]") link.click() ,如下所示: -

WebDriverWait

<强>被修改..

实施element以获取link = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[contains(text(),'Another Custom Form (Mobile)')]/following-sibling::td/a[contains(@onclick, 'editProjectFormType')]"))) link.click() ,如下所示: -

element

注意: - 如果目标frame位于frame内。您需要先以browser.switch_to_frame("frame name or id")切换到element,然后按上述方式查找目标public static class Extensions { public static TAttribute GetAttribute<TAttribute>(this Enum enumValue) where TAttribute : Attribute { return enumValue.GetType() .GetMember(enumValue.ToString()) .First() .GetCustomAttribute<TAttribute>(); } }

希望它会帮助你...... :)

答案 2 :(得分:0)

第一个对我有用,做了一些修改。 我在单个 td 中有 3 个按钮,其他 4 个 td 有文本。我必须根据一个 td 值(例如 customer_name)单击特定按钮。下面是代码。

self.driver.find_element_by_xpath(
"//td[contains(text(),'" + customer_name + "')]/following-sibling::td/button[text()='Accept']"
).click()