Проблема Python Selenium при нажатии на элемент - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть код, который я проверял в 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()

Любой совет по поводу чего-то еще, что я могу попробовать, будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Проблема была из-за множества вещей.Один мне нужно было реализовать команду для изменения активных вкладок.

Автоматизация, которую я выполнял, открыла новую вкладку, поэтому мне пришлось использовать приведенный ниже код для активации этой вкладки.

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

Мне также нужно было немного подождать, пока что-то загрузится

driver.implicitly_wait(3)

Мне также нужно было учесть iframes.У меня было несколько 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
0 голосов
/ 04 декабря 2018

Требуемый элемент является 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
    
...