Selenium不会使用任何方法定位元素

问题描述 投票:0回答:3

我很难让selenium在网站上找到一个元素(准确地说是微光)。理想情况下,我希望驱动程序将密钥发送到输入字段,但selenium不会出于某种原因找到它。

我已经尝试通过ID,Xpath和名称进行定位。有关如何找到此元素的任何建议?

这是html:

<input
  id="contestant[name]"
  name="name"
  ng-model-options="{ debounce: 300 }"
  ng-model="contestantState.form.name"
  ng-pattern=".*"
  placeholder="Alice Smith" required=""
  style="width: 246px"
  type="text"
  class="ng-empty
  ng-invalid
  ng-invalid-required
  ng-valid-pattern
  ng-dirty
  ng-valid-parse
  ng-touched"
>
python selenium xpath css-selectors webdriverwait
3个回答
1
投票

尝试其中之一

By.CssSelector("[id*='contestant']")

By.CssSelector("[ng-model='contestantState.form.name']")

By.CssSelector("[name='name']")

0
投票

使用WebDriverWait处理Web页面上的动态元素。尝试以下代码。如果此代码不起作用,请检查您的输入元素是否在任何iframe内。

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

inputelement=WebDriverWait(driver,40).until(expected_conditions.element_to_be_clickable((By.ID,'contestant[name]')))
inputelement.send_keys("Apple")

0
投票

要将字符序列发送到所需元素,因为该元素是Angular元素,因此您需要引导WebDriverWait以使元素可单击,并且您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTORWebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-empty.ng-invalid.ng-invalid-required.ng-valid-pattern.ng-dirty.ng-valid-parse.ng-touched[id=\"contestant[name]\"]"))).send_keys("ml2017")
  • 使用XPATHWebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-dirty ng-valid-parse ng-touched' and @id=\"contestant[name]\"]"))).send_keys("ml2017")
© www.soinside.com 2019 - 2024. All rights reserved.