Selenium Webdriver Не удается найти элемент кнопки нажатия - PullRequest
0 голосов
/ 12 марта 2019

Я не знаю элемент, используемый для нажатия кнопки.

Я пытался написать так:

driver.find_element_by_xpath('//*/input[@type="button"]').click()

Сообщение об ошибке:

повысить исключение_класса (сообщение, экран, отслеживание стека) selenium.common.exceptions.ElementNotVisibleException: сообщение: элемент не отображается

HTML:

<input type="button" name="ctl00$c3$g_6_f947_400a_aa18_59efd84584ae$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem" value="Save" onclick="if (!PreSaveItem()) return false;if (SPClientForms.ClientFormManager.SubmitClientForm('WPQ2')) return false;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ctl33$g_69_f947_400a_aa18_59efd84584ae$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))" id="ctl00_ctl33_g_696_f947_400a_aa18_59efd84584ae_ct0_toolBarTbl_RightRptControls_ctl00_ctl00_diidIOSaveItem" accesskey="O" class="ms-ButtonHeightWidth" target="_self">

Ответы [ 4 ]

0 голосов
/ 12 марта 2019

Требуемый элемент является динамическим элементом, поэтому для нахождения элемента необходимо вызвать WebDriverWait , чтобы элемент был активным для клика , и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ms-ButtonHeightWidth[value='Save'][name$='SaveItem']"))).click()
    
  • Использование XPATH:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ms-ButtonHeightWidth' and @value='Save'][contains(@name, 'SaveItem')]"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 12 марта 2019

Вы пытались найти значение?

driver.find_element_by_xpath('//*/input[@value="Save"]').click()

Если это не сработает, было бы полезно, если бы вы могли загрузить HTML-код для страницы, которую вы тестируете, или указать URL-адрес.

0 голосов
/ 12 марта 2019

Не уверен, почему вы используете //*/input вместо прямого //input.Вот решение.

driver.find_element_by_xpath("//input[@type='button' and @value='Save']").click()
0 голосов
/ 12 марта 2019

Видно ли слово «Сохранить»? Если это так, вы можете попробовать это:

driver.find_element_by_xpath("//*[contains(text(), 'Save')]").click()
...