Как вызвать send_keys (), используя selenium и Python - PullRequest
1 голос
/ 09 октября 2019

Я знаю, что делаю что-то не так. Мне нужно создать программное обеспечение для тестирования веб-сайта. send_keys отлично работает для остальной части моего кода, но я не уверен, что я делаю неправильно в этом разделе. Я перепробовал все, что мог придумать. Я очень плохо знаком с питоном и селеном, так что, возможно, это что-то глупое.

Вещи, которые я пробовал:

1.

elem =  lambda: driver.find_element_by_xpath('//textarea[@aria-label="Comment"]').click()
elem().click()
elem.send_keys("this is a comment")
elem.send_keys(Keys.RETURN)

2.

elem =  lambda: driver.find_element_by_xpath('//span[@aria-label="Comment"]').click()
elem().click()
elem.send_keys("this is a comment")
elem.send_keys(Keys.RETURN)

3.

com_elem = driver.find_element_by_xpath('//textarea[@aria-label="Add a comment…"]')
com_elem.clear()
com_elem.send_keys("comment")

Я перепробовал каждую комбинацию, которую только мог придумать, и знаю, что она должна соответствовать HTML, но я все еще пробовал ее с лямбдой и без, с span и textarea (так какесть кнопка, которую вы нажимаете, которая помещает курсор в текстовое поле) Я не знаю, что еще попробовать.

Все, что нужно сделать, - это щелкнуть текстовое поле, добавить слова и нажать клавишу ввода.

Это HTML-код для текстового поля, в котором он должен находиться:

<form class="X7cDz" method="POST">

<textarea aria-label="Add a comment…" placeholder="Add a comment…" class="Ypffh" autocomplete="off" autocorrect="off" style="height: 18px;"></textarea>

<button class="sqdOP yWX7d    y3zKF     " type="submit">
Post
</button> 

</form>

Это HTML-код для кнопки, на которую он может нажать, и курсор появится в поле:

<span class="_15y0l">
<button class="dCJp8 afkep">
<span aria-label="Comment" class="glyphsSpriteComment__outline__24__grey_9 u-__7"> 
</span>
</button>
</span>

Эта часть веб-сайта работает отлично. Я знаю, потому что я проверял это вручную.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Требуемый элемент является JavaScript включенным элементом, поэтому для вызова send_keys() на элементе необходимо вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих Стратегии локатора :

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

    elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea[aria-label^='Add a comment'][placeholder^='Add a comment']")))
    elem.send_keys("Daniela Ciro")
    elem.send_keys(Keys.RETURN)
    
  • Использование XPATH:

    elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//textarea[starts-with(@aria-label, 'Add a comment') and starts-with(@placeholder, 'Add a comment')]")))
    elem.send_keys("Daniela Ciro")
    elem.send_keys(Keys.RETURN)
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 09 октября 2019

Я не думаю, что вам нужно использовать лямбду для выполнения этой задачи. Вы на правильном пути, вам нужно сначала определить путь к текстовому полю и установить его в переменную, чтобы ваш send_keys () знал, куда вводить текст. Затем вам нужно найти путь к кнопке ввода и щелкнуть по нему. Что-то вроде этого должно помочь:

elem = driver.find_element_by_xpath('textbox xpath here')
elem.send_keys('what you want to put into textbox')
driver.find_element_by_xpath('your enter button xpath here').click()

Если бы вы могли предоставить веб-сайт или пример, я мог бы дать более конкретный код.

...