1

我从 Chrome 中检查了以下代码。我正在尝试单击此对象。理想情况下利用 xpath 或 css 选择器。

我复制了如下所述的 Xpath

/html/body/form/table[4]/tbody/tr/td[1]/table/tbody/tr[3]/td

这是完整路径

<td style="text-decoration: none; color: rgb(0, 0, 0); font-family: Arial; font-size: 11px; padding-bottom: 2px; padding-top: 1px; border-bottom: 1px solid rgb(194, 194, 194); background: rgb(255, 255, 255); cursor: auto;" onmouseover="this.style.background='#BED9F5'; this.style.cursor='hand'; showTitle(this,'Review Quotes / Quote To Order',150,true); window.status='Review Quotes / Quote To Order'; return true;" onmouseout="this.style.background='#FFFFFF'; this.style.cursor='auto'; hideTitle(); window.status=' '; return true;" onclick="if (warnUnfinishedPage()) return false; changePage('pc.quote.html.QuoteSummarySection','refresh');  return false;" align="left" width="110" valign="middle" title="Review Quotes / Quote To Order">

&nbsp;&nbsp;Quotes

</td>

Katalon Recorder 将 Python 导出为以下几个选项,但似乎没有一个对我有用。他们都回来了no such element。我认为这可能与括号有关?

driver.find_element_by_xpath("//td[@onclick=\"if (warnUnfinishedPage()) return false; changePage('pc.quote.html.QuoteSummarySection','refresh'); return false;\"]").click()

driver.find_element_by_xpath("//tr[3]/td").click()

driver.find_element_by_css_selector("td[title=\"Review Quotes / Quote To Order\"]").click()

任何关于我可以尝试的其他事情的建议将不胜感激!

4

2 回答 2

1

所需的元素是启用了JavaScript的元素,因此您必须诱导WebDriverWait以使该元素可点击,并且您可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td[title='Review Quotes / Quote To Order']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@title='Review Quotes / Quote To Order' and contains(.,'Quotes')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
于 2018-12-04T18:58:09.370 回答
1

这个问题是由于很多事情造成的。我需要实现一个命令来更改活动选项卡。

我正在执行的自动化打开了一个新选项卡,因此我必须利用下面的代码来激活该选项卡。

driver.switch_to.window(driver.window_handles[1])

我还需要实现一点等待加载

driver.implicitly_wait(3)

我还需要考虑 iframe。我有多个 iframe,所以我使用下面的内容打印出我有多少

seq = driver.find_elements_by_tag_name('iframe')
    print("Number of frames present in the web page are: ", len(seq))

然后我能够弄清楚我有 2 个帧,并且下面的代码循环遍历每个帧,直到发现 xpath。

    for x in range(2):
        try:
            driver.switch_to.frame(x)
            driver.find_element_by_xpath("//tr[3]/td").click()
        except:
            print("It's not: ", x)
            continue
于 2018-12-05T01:23:27.657 回答