ExpectConditions.ElementIsVisible 返回 TimeoutException,即使元素存在



我正在使用Selenium ChromeDriver v2.40,Chrome版本67。

var driver = Browser.GetChromeDriver();          
driver.Navigate().GoToUrl(url);
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var abc=driver.FindElement(By.XPath("//*[@id='pdp-size-select']"));
var aaa=wait.Until(d => d.FindElement(By.XPath("//*[@id='pdp-size-select']")));
abc.Click(); // failed because elementisnotvisible

以上两个 findelement 工作正常,可以获取值但无法单击,因为元素不可见

所以我继续尝试预期条件,但没有运气:

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='pdp-size-select']")));

上面的代码返回:

OpenQA.Selenium.WebDriverTimeoutException: 'Timed out after 10 seconds'

它与 Chrome v67 有任何向后兼容性问题吗?

根据错误元素不可见,您似乎非常接近。当您尝试在元素上调用Click()时,请继续前进,因此您需要使用如下所示ElementToBeClickable()而不是ElementIsVisible()预期条件

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id='pdp-size-select']"))).Click();

如果不引用SeleniumExtrasWaitHelpers代码行将是:

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id='pdp-size-select']"))).Click();

注意:正如您提到的,您使用的是Chromev67.x,请确保您使用的是ChromeDriver v2.40(但不是ChromeDriver v2.4(


更新

进一步调试,您调整的定位器策略似乎准确地标识了HTML DOM中的两 (2( 个元素。因此,您需要构造一个唯一的定位器来识别并单击所需的元素,如下所示:

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[@data-track-action='Product-Page']//following::select[@id='pdp-size-select']"))).Click();

注意:所需的元素是select元素,如果您希望按照最佳实践<select>元素进行交互,则需要使用OpenQA.Selenium.Support.UI命名空间中的SelectElement类。

相关内容

  • 没有找到相关文章

最新更新