我很新的测试,试图更好地了解究竟是怎么回事的。 我发现,当与CSS选择器元件具有waitUntilCanInteract或waitUntilDisplayed连接到它,即使当我做了铬检查元素显示在浏览器中一些我们的测试代码失败。 他们更改为waitUntilExists他们到达一个路过点,所以我想知道到底是怎么回事。要创建这种情况呢?
Answer 1:
Precisesly 硒涉及与元素的三个独特的状态。
所述内元件的存在 的HTML :元件的这种状态可以通过ExpectedCondition来检测
presenceOfElementLocated()
其中期望的是,以检查是否该元素存在于DOM的页面的。 这并不一定意味着该元素是可见的 。〔实施例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("css_of_element")));
所述内元件的可见性 的html :元件的这种状态可以通过ExpectedCondition来检测
visibilityOfElementLocated()
其中期望的是,以检查是否该元素存在于DOM一个页面和可见的。 能见度意味着该元件不仅显示,但也具有高度和宽度 ,该宽度大于0。〔实施例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("css_of_element")));
元素是可点击 :元素的这种状态可以通过ExpectedCondition被检测
elementToBeClickable()
其中期望是检查是否元素可见并启用 ,以便您可以点击它。〔实施例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("css_of_element")));
你可以找到详细的讨论硒:检查元素的存在
Answer 2:
那么,开发商决定让它如此。
看到的,元件可以存在于DOM但是不可见的或不交互。 但不是周围的其他方式。
如果您的测试都通过时waitingUntilExists否则失败,你可能要延长等待时间,如果你想使他们通过。 但是,这只是我的猜测没有看到你的任何代码。
Answer 3:
简单的答案是,有时当网页上的设计师作品尤其是在工作基金会CSS框架或引导,他们故意隐藏原始CSS / HTML标签和,同时将基础或引导基础的设计覆盖喜欢的页面花哨的按钮元素导致原元件被隐藏。
最好的办法可能是这样的:
一,同时呼吁一个元素可以声明一个WebElement精确定位,并用moveToElement命令,而不是简单地调用FindElement.By.xxxxx恩:
//*** Calling a WebElement and using moveToElement command***//
WebElement (anyElementname) = browser.findElement(By.partialLinkText("xxxxxxxxxxx"));
action.moveToElement(anyElementname).perform();
//*** Waiting for 8 seconds***//
Thread.sleep(8000, 80000);
II。 您可以使用“等待”提供的网页加载时间和元素之间的相互作用
III。 避免复制重叠CSS elemenet尤其是XPath的,而是从DIV /按键/李的原始来源复制的XPath
让我知道它是否适合你与否。 干杯!