我正在尝试使用Python和Selenium查找文本框。.我通过ID,按名称尝试了by_css_selector,通过XPATH,但消息始终相同:
Unable to locate element: #x-auto-225-input
这是一段html。我想找到文本框来填充它。
<td class="x-table-layout-cell" role="presentation" style="padding: 2px;">
<div role="presentation" class=" x-form-field-wrap x-component" id="x-auto-225" style="width: 150px;"></div>
<input type="text" class=" x-form-field x-form-text " id="x-auto-225-input" name="PURCHASE_ORDER_CODE_NAME" tabindex="0" style="width: 150px;">
</td>
我最后一次尝试是:
pc = browser.find_element_by_css_selector("#x-auto-225-input").click()
pc.send_keys("7555425-1")
答案 0 :(得分:1)
在html上,提到的id
可以是动态的,因此不能将静态ID放在标识符中。
但是,由于html中存在name
属性,因此您可以使用该属性来标识您的元素,例如:
browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME").click()
根据与OP的讨论更新的答案
由于UI中存在iframe,因此您需要先切换到iframe,然后单击该元素。
要切换到iframe
,您可以使用:
browser.switch_to.frame(browser.find_element_by_tag_name('iframe'))
然后使用:
pc = browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME")
pc.click()
pc.send_keys("7555425-1")
如果要切换回默认内容,可以使用:
browser.switch_to.default_content()
答案 1 :(得分:0)
所需元素是动态元素,因此要对该元素调用click()
,必须诱使 WebDriverWait 使元素可点击,并且可以使用以下任一Locator Strategies:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.x-form-field.x-form-text[id$='-input'][name='PURCHASE_ORDER_CODE_NAME']"))).click();
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class=' x-form-field x-form-text ' and contains(@id,'-input')][@name='PURCHASE_ORDER_CODE_NAME']"))).click();
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 2 :(得分:0)
也许您可以尝试另一种“选择器”方法。例(Javascript):
selenium.By.xpath('//*[@data-icon="edit"]')
driver.findElement(by).click()