当前位置: 首页 > 知识库问答 >
问题:

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

唐炳
2023-03-14

我用的是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'

它与Chromev67有任何向后兼容问题吗?

共有1个答案

苏法
2023-03-14

根据错误元素不可见似乎你很接近。接下来,当您尝试在元素上调用< code>Click()时,您需要使用< code > elements visible()而不是预期的条件,如下所示:

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

如果没有对SeleniumExtrasWaitHelper的任何引用,代码行将是:

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();

注意:所需的元素是< code>select元素,如果您希望与< code >交互

 类似资料:
  • 问题内容: 我正在尝试使用getElementById()获取元素,但是即使元素存在,它也会返回null。我究竟做错了什么? 问题答案: 您必须将其放在一个 事件中。脚本执行时尚未到达DOM 。

  • 亲爱的Selenium Webdriver专家, 当从http://www.domain.com.au/property/for-sale/house/nsw/auburn/?adid=2010111460对“/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a”执行XPath查询时,我(在if语句上)遇到以下异常: 下面是发生此异常的代码段:

  • 我有以下PHP代码。我希望返回插入的最后一个id: 我的DB架构如下: 我已经把厨房的水槽扔过去了,但一点也没有。无论我做什么,总是未定义的。我已经验证了实际上有一个插入。我只剩下运行另一个select并返回最大VesselTransitID的(可怕的)选项,这并不能保证正确的结果。

  • 请参考截图。我正试图单击“取消”按钮,如我的截图所示。即使元素的ID存在,我也无法单击按钮。弹出窗口既不是一个新窗口,也不像是一个警告我。我试图搜索是否是窗口句柄的问题。但是当我搜索窗口句柄时,它只给我一个数字: 收到错误消息- 线程“main”org.openqa.selenium.nosuchelementexception:没有这样的元素:找不到元素:{“method”:“id”,“sele

  • 我的代码: 我有一个问题即使它存在,也找不到该元素。我用汤仔细检查了元素是否确实存在,并且它按照输出进行操作。 输出: 我有一个遍历每个应用程序域的循环(包含来自每个的数据)但是,它在大多数情况下都会找到并单击元素,但对于某些元素却没有,我不知道为什么。 这是站点html。有许多,每个都包含不同的,我需要单击它

  • 这是我用来使用铬Web驱动程序和python查找元素的代码行 这是每次尝试运行代码时抛出的错误 这些是标题栏上的按钮,我试图让我的代码单击html按钮 这是努力按钮的html代码,我试图使用selenium来定位它,以便它可以点击这里,但它总是说没有找到这样的元素 我甚至创建了一个单独的函数来一次又一次地找到元素并在每次成功尝试后Hibernate5秒,直到它点击了元素,但仍然没有运气它永远运行而