Нажатие внутри текста внутри div и таблицы - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь щелкнуть внутри текстового поля, которое находится внутри элемента div, который сам находится внутри таблицы. Я пробовал множество подходов, но ни один из них не работает

Это код для элемента:

<tr valign="top"><td id="xNEPk-chdex" style="height:100%"><div id="xNEPk" class="labelRowCnt z-div"><span id="xNEPm" class="z-label">Username:</span></div></td><td id="xNEPk-chdex2" class="z-hbox-separator"><img style="height:0;width:0"></td><td id="xNEPl-chdex" style="height:100%"><div id="xNEPl" class="compRowCnt z-div"><input id="xNEPn" class="login z-textbox" autocomplete="off" value="" type="text" name="j_username"></div></td></tr>

Я не могу использовать идентификатор элемента, так как идентификатор элемента постоянно меняется каждый раз, когда я обновляю страницу

Я пробовал следующий метод, некоторые из которых

element =wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class=".compRowCnt.z-div"]/input[@class=".login.z-textbox"]')))
element.click()

element = driver.find_element_by_class_name("login.z-textbox")
element.click()

element =wait.until(EC.element_to_be_clickable((By.NAME,"j_username")))
element.click()

Но, похоже, никто не работает. Каждый раз, когда я получаю элемент не найден.

Я хочу иметь возможность щелкать внутри текстового поля, чтобы я мог указать свое имя пользователя с помощью клавиш отправки.

Может кто-нибудь, пожалуйста, помогите мне? Я использую хром

1 Ответ

1 голос
/ 27 мая 2019

Кажется, ты был довольно близко. Поскольку требуемый элемент является динамическим элементом, для click() элемента вы должны заставить WebDriverWait для элемента быть активным , и вы можете использовать любой из следующих локаторов. Стратегии

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.login.z-textbox[name='j_username']"))).click()
    
  • Использование XPATH:

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

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...