我正在尝试使用chromedriver硒选择此元素:
<span title="1968milziewa@ama-coupons.com" class="rcmContactAddress">1968milziewa@ama-coupons.com</span>
其中电子邮件地址是变量。
尝试过此方法,但不起作用:
driver.FindElement(By.XPath("//span[text()='" + username + "@ama-coupons.com']")).Click();
也尝试过:
driver.FindElement(By.XPath("//span[contains(@title, '"+username+"@ama-coupons.com']")).Click();
但它也不起作用。 #1给出了找不到的元素#2没有给出有效的xpath选择器。
更新:
我让它使用硬编码的电子邮件地址,但是,一旦我用一个变量替换了该电子邮件地址,它就不再起作用。
HTML元素:
<span title="1959jessamin@ama-coupons.com" class="rcmContactAddress">1959jessamin@ama-coupons.com</span>
代码:
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector("span[title='"+email+"']"))).Click(); Thread.Sleep(1000);
错误:(还会显示电子邮件的值:)
内部异常1:
NoSuchElementException:否这样的元素:无法找到元素:{“ method”:“ css选择器”,“ selector”:“ span [title='1959Jessamin@ama-coupons.com']”}
(会话信息:chrome = 68.0.3440.106)
(驱动程序信息:chromedriver = 2.41.578737(49da6702b16031c40d63e5618de03a32ff6c197e),platform = Windows NT 10.0.17134 x86_64)
答案 0 :(得分:0)
您在选择器内部忘记)
的第二个选择器存在问题:
By.XPath("//span[contains(@title, '1968milziewa@ama-coupons.com')]")
对于element not found
错误,请使用等待,此处代码带有明确的等待,直到元素可单击为止:
new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("span[title='1968milziewa@ama-coupons.com']"))).Click();
有关等待的更多信息,您可以在Selenium Docs中找到,或者 When to use explicit wait vs implicit wait in Selenium Webdriver?
如果元素位于iframe Selenium: Unable to access iframe and data inside it
中还可以使用选择器:
By.CssSelector("span[title='1968milziewa@ama-coupons.com']")
By.XPath("//span[.='1968milziewa@ama-coupons.com']")